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