Bash grep不同的输出

时间:2018-07-24 13:36:33

标签: bash grep control-characters

grep 有一个有趣的问题。基本上,我试图匹配文件中的某些控制字符并获取计数。

grep -ocbUaE $"\x07\|\x08\|\x0B\|\x0C\|\x1A\|\x1B" <file>

很有趣,在CLI中它匹配所有控制字符并返回正确的计数,但是如果我在bash脚本中使用它,则它什么都不匹配。

有什么主意我做错了吗?

经过以下测试:MacOS和CentOS-相同的问题。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:3)

我认为您应该将命令更改为:

grep -cUaE $'[\x07\x08\x0B\x0C\x1A\x1B]' file

我删除了多余的输出标志,当存在-c时,这些输出标志将被忽略。我假设您出于某种原因加入了-U-a

其他更改是将$''与单引号一起使用(您在此处不需要双引号的字符串),并用方括号表达式替换OR系列,该表达式与任何一个字符都匹配。

请注意,C风格的字符串$''并非在所有shell中都有效,因此,如果要使用bash,则应调用bash script.sh之类的脚本和/或添加shebang {{1} }(如果可执行)。 #!/bin/bash的行为与sh script.sh的行为相同。