-2

文件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,。但是,我没有输出。为什么 ?

4

2 回答 2

4

grep 手册页:

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

或者换句话说:

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

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


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

编辑

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

于 2013-08-19T21:41:27.860 回答
1

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

b
c

不是

b
d

因为你有-v

您的第二次尝试没有给出任何结果,因为 grep 确实按行匹配。如果整行不匹配,则该行将不会在输出中。

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

kent$  echo "a,b,c,d"|sed 's/[ad]//g'
,b,c,
于 2013-08-19T21:45:40.700 回答