在'grep' - 为什么它会这样?

时间:2013-08-19 21:39:28

标签: linux bash unix

文件still包含:

a
b
c
d

grep -v -e "a" -e "d" still

给出:

b
c

这是预期的。

现在,档案fill包含:

a,b,c,d

我的命令

grep -v -e "a" -e "d" fill

我希望它能给我,b,c,。但是,我没有输出。为什么?

2 个答案:

答案 0 :(得分:4)

来自grep man page:

  

grep,egrep,fgrep - 打印匹配模式的行

或换句话说:

  

grep搜索指定的输入文件(或标准输入,如果没有文件被命名,或者如果一个连字符 - 减号( - )作为文件名),则包含与给定PATTERN匹配的行。默认情况下,grep打印匹配的行。

在第二个示例中,您的文件只包含一行,与反转的模式不匹配。所以没有打印出来。


在第二种情况下你可以做的是使用cut来削减你的线,然后最终用它做点什么。

修改

正如@Kent所建议的那样,在第二种情况下使用sed比简单地剪切,打印,然后点击或做其他事情来匹配更好,更强大。

答案 1 :(得分:1)

首先,你的第一个例子应该给出:

b
c

不是

b
d

因为你有-v

你的第二次尝试什么都没有,因为grep确实符合直线。如果整行不匹配,则该行不会输出。

如果要在第二个示例中删除a and d,可以使用sed:

kent$  echo "a,b,c,d"|sed 's/[ad]//g'
,b,c,