我如何使grep在for循环中正常工作?命令在循环外运行

问题描述 投票:0回答:1

我有一堆xml文件,我需要切出一部分并将其转换为十六进制。我有一个从命令行运行的命令

grep -oE '<y min="0.0" max="15.0">[^<]*</y>' AP22S.xml  | sed 's/<[^>]*>//g' | tr " " "\n" | grep -v [a-zA-Z] | xargs printf '%x' > AP22S.blob

虽然放在此循环中

for f in $FILES
do
grep -oE "<y min=\"0.0\" max=\"15.0\">[^<]*</y>" "$f" \
  | sed 's/<[^>]*>//g' \
  | tr " " "\\n" \
  | grep -v "[a-zA-Z]" \
  | xargs printf '%x' \ 
> $TARGET_DIR"$f"".blob"
done

它什么也不做。我想念什么?

我想要的XML部分的样本

0 0 0 0 0 0 2 4 6 7 8 9 10 10 11 11 11 12 12 12 12 12 12 11 11 10 10 10 9 8 7 6 0 4 4 4 5 5 6 6 7 8 8 9 9 10 10 10 11 11 11 11 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 11 11 11 11 11 11 11 11 11 11 10 11 11 10 11 11 10 11 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 9 9 9 9 9 9 9 9 8 8 8 8 8 8 7 7 7 7 7 6 6 6 6 6 0 6 7 7 7 7 7 7 7 7 7 7 8 8 8 8 8 8 8 8 8 9 9 9 9 9 9 9 9 9 9 9 9 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 9 10 10 9 10 10 9 9 9 9 9 9 9 9 0 9 9 9 9 9 9 9 0 9 9 9 9 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 7 7 7 7 7 7 7 6 6 6 6 6 6 5 5 4 3 5 5 5 5 5 5 5 4 4 1 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 4 0 4 4 4 4 3 3 2 1 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0 4 4 4 4 4 4 4 4 4 4 4 4 3 4 4 4 4 4 4 4 4 4 4 4 4 4 3 4 1 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 0 5 5 5 5 5 5 5 5 5 5 0 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 2 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 1 0 0 0

样本输出

000000246789aabbbccccccbbaaa98760444556678899aaabbbbcccccccccccccc2cccccccccccccccccccccccccccccccccccccccccccccccbbbbbbbbbabbabbabaaaaaabaaaaaaaaaaaaaaaaaaaaaa99999999888888777776666067777777777888888888999999999999aaaaaaaaaaaaaaa9aa9aa99999999099999990999988888888888888877777776666655435555555544144444434444444444044443321344444444444444404444444444443444444444444434133444444444444455555555555555555555555555555555555555055555555550554444444444444444433333333333333333333333323222222222211111111111000101000

bash sed grep sh tr
1个回答
0
投票

我想念什么?

该行中有一个非常微妙的错误

  | xargs printf '%x' \ 

-反斜杠后的空格。这不仅构成printf的第二个参数,而且还将下一行中的输出重定向从管道中分离出来,从而使任何内容都不会写入输出文件。

顺便说一句,如果您不想以AP22S.xml.blob命名输出文件,而是以AP22S.blob命名,则可以使用>$TARGET_DIR${f%.xml}.blob删除原始扩展名。

© www.soinside.com 2019 - 2024. All rights reserved.