我有一行文字,我正在使用grep查看字母d
是否存在。这是一个正在发生的事情的例子:
返回1,这是正确的:
echo d file='hello world' | grep -c -w d
返回0,这是正确的:
echo file='hello world' | grep -c -w d
返回1,这是正确的:
echo d file='hello world d' | grep -c -w d
返回1 - 应返回0:
echo file='hello world d' | grep -c -w d
我需要它来忽略单引号内的数据。 grep
是否适合在此处使用,还是有其他可能有用的工具?
答案 0 :(得分:5)
我使用sed
删除引号内的所有文字,然后在grep
的输出上执行sed
。像这样:
echo "d 'hi there'" | sed -r "s|'[^']*'||g" | grep -c -w d
答案 1 :(得分:2)
通过工具管道输出以删除任何您不想要的内容,例如sed
:
echo d file='hello world' | sed -e "s:'[^']*'::g" | grep -c -w d
这是:将(s
)与正则表达式(用:
分隔)匹配的任何内容替换为空字符串。
答案 2 :(得分:1)
根据您提供的信息,这应该有效:
grep -c -E“^ [^'] *?d。*?'。*?'”
%> cat blah.sh echo d file=\'hello world\' | grep -c -E "^[^']*?d.*?'.*?'" echo file=\'hello world\' | grep -c -E "^[^']*?d.*?'.*?'" echo d file=\'hello world d\' | grep -c -E "^[^']*?d.*?'.*?'" echo file=\'hello world d\' | grep -c -E "^[^']*?d.*?'.*?'" %> ./blah.sh 1 0 1 0