grep – 处理引号内的文本

我有一行文本,我正在使用grep来查看字母d存在。 这是一个发生了什么事情的例子:

返回1,这是正确的:

 echo d file='hello world' | grep -c -wd 

返回0,这是正确的:

 echo file='hello world' | grep -c -wd 

返回1,这是正确的:

 echo d file='hello world d' | grep -c -wd 

返回1 – 应该返回0:

 echo file='hello world d' | grep -c -wd 

我需要它忽略单引号内的数据。 grep是在这里使用的正确的工具还是有其他的东西可以帮助?

我会使用sed删除引号内的所有文本,然后对sed的输出做一个grep 。 像这样的东西:

 echo "d 'hi there'" | sed -r "s|'[^']*'||g" | grep -c -wd 

通过一个工具管输出来摆脱你不想要的东西,例如sed

 echo d file='hello world' | sed -e "s:'[^']*'::g" | grep -c -wd 

这读取:用空字符串替换任何匹配正则表达式(用:分隔)的任何东西。

根据您提供的信息,这应该工作:

grep -c -E“^ [^'] *?d。*?'。*?'”

 %>猫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