首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使grep在for循环中正确工作?命令在循环之外工作。

如何使grep在for循环中正确工作?命令在循环之外工作。
EN

Stack Overflow用户
提问于 2017-12-12 18:37:50
回答 1查看 73关注 0票数 0

我有一堆xml文件,我需要从其中删除一个部分,并将其转换为十六进制。我有一个从命令行工作的命令。

代码语言:javascript
复制
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

但是当放置在这个循环中时

代码语言:javascript
复制
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 2 4 7 8 9 10 11 11 11 12 12 12 11 11 1111 11 11 10 11 11 10 11 10 11 10 10 10 9 9 9 10 10 109 9 9 0 9 9 9 8 8 84 4 4 5 5 52 3 2 2 2 1 1 1 0 0 0

样本输出

000000246789aabbbccccccbbaaa98760444556678899aaabbbbcccccccccccccc2cccccccccccccccccccccccccccccccccccccccccccccccbbbbbbbbbabbabbabaaaaaabaaaaaaaaaaaaaaaaaaaaaa99999999888888777776666067777777777888888888999999999999aaaaaaaaaaaaaaa9aa9aa99999999099999990999988888888888888877777776666655435555555544144444434444444444044443321344444444444444404444444444443444444444444434133444444444444455555555555555555555555555555555555555055555555550554444444444444444433333333333333333333333323222222222211111111111000101000

EN

回答 1

Stack Overflow用户

发布于 2019-10-18 07:24:49

我遗漏了什么?

这条线上有一个非常微妙的错误

代码语言:javascript
复制
  | xargs printf '%x' \ 
  • 反斜杠后面的空格。这不仅构成了printf的第二个参数,而且还将下面一行中的输出重定向从管道中分离出来,这样就不会将任何内容写入输出文件。

顺便说一句,如果您希望不命名输出文件(例如AP22S.xml.blob ),而是命名AP22S.blob,则可以使用>$TARGET_DIR${f%.xml}.blob删除最初的扩展名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47779388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档