grep 有一个有趣的问题。基本上,我试图匹配文件中的某些控制字符并获取计数。
grep -ocbUaE $"\x07\|\x08\|\x0B\|\x0C\|\x1A\|\x1B" <file>
很有趣,在CLI中它匹配所有控制字符并返回正确的计数,但是如果我在bash脚本中使用它,则它什么都不匹配。
有什么主意我做错了吗?
经过以下测试:MacOS和CentOS-相同的问题。
谢谢您的帮助!
答案 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
的行为相同。