文件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,
。但是,我没有输出。为什么 ?
从grep
手册页:
grep, egrep, fgrep - 打印匹配模式的行
或者换句话说:
grep 搜索命名的输入文件(或标准输入,如果没有文件被命名,或者如果给定一个连字符减号 (-) 作为文件名)包含与给定 PATTERN 匹配的行。默认情况下,grep 打印匹配的行.
在您的第二个示例中,您的文件仅包含一行,与反转模式不匹配。所以什么都没有打印。
在第二种情况下你可以做的是使用cut
, 剪断你的线路,然后最终用它做点什么。
编辑
正如@Kent 所建议的那样,在第二种情况下使用 sed 比简单地剪切、打印、然后 grepping 或做其他事情来匹配更好、更强大。
首先,你的第一个例子应该给出:
b
c
不是
b
d
因为你有-v
您的第二次尝试没有给出任何结果,因为 grep 确实按行匹配。如果整行不匹配,则该行将不会在输出中。
如果要a and d
在第二个示例中删除,可以使用 sed:
kent$ echo "a,b,c,d"|sed 's/[ad]//g'
,b,c,