grep - 处理引号内的文本

时间:2009-07-22 15:33:59

标签: linux grep

我有一行文字,我正在使用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是否适合在此处使用,还是有其他可能有用的工具?

3 个答案:

答案 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