Bash grep不同的输出

Bash grep不同的输出,bash,grep,control-characters,Bash,Grep,Control Characters,我对grep有一个有趣的问题。基本上,我试图匹配文件中的某些控制字符并获得计数 grep -ocbUaE $"\x07\|\x08\|\x0B\|\x0C\|\x1A\|\x1B" <file> grep-ocbUaE$“\x07\|\x08\|\x0B\|\x0C\|\x1A\|\x1B” 有趣的是,在CLI中,它匹配所有控制字符并返回正确的计数,但是如果我在bash脚本中使用它,它将不匹配任何内容 你知道我做错了什么吗 测试日期:MacOS和CentOS-同一版本 谢谢你的帮

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

grep -ocbUaE $"\x07\|\x08\|\x0B\|\x0C\|\x1A\|\x1B" <file>
grep-ocbUaE$“\x07\|\x08\|\x0B\|\x0C\|\x1A\|\x1B”
有趣的是,在CLI中,它匹配所有控制字符并返回正确的计数,但是如果我在bash脚本中使用它,它将不匹配任何内容

你知道我做错了什么吗

测试日期:MacOS和CentOS-同一版本


谢谢你的帮助

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

grep -cUaE $'[\x07\x08\x0B\x0C\x1A\x1B]' file
我删除了额外的输出标志,当出现
-c
时,这些标志将被忽略。我假设您包含
-U
-a
是有原因的

其他更改是使用带有单引号的
$'
(此处不需要双引号字符串),并将
序列替换为括号表达式,如果任何字符匹配,则括号表达式将匹配


请注意,C样式的字符串
$'
并不能在所有shell中都工作,因此如果您想使用bash,应该像
bash script.sh那样调用脚本和/或包含shebang
#/bin/bash
如果它是可执行的
sh script.sh
的行为方式与
bash script.sh

不同,我对
$”
(因为您没有变量)和传递给grep的开关列表感到困惑。您肯定只需要
-cE
?有没有可能您正在Bash中以交互方式运行,而只是使用
sh
来运行脚本?嗨,Tom,谢谢您的回答。是的,关于-cE就足够了这一事实,你是对的。前面的$用于控制字符,是的,我正在用sh在Bash中以交互方式运行脚本。但我不明白为什么会得到两个不同的结果…另请参见。。而
-U
仅在
MS-DOS和MS-Windows
上有用,请参见手册页谢谢您的详细解释和命令:)。我确认它按预期工作,并且我从CLI和脚本中得到相同的结果。@Ionut不客气。如果你还没有读过,我建议你读!