我需要逐行读取文件并使用-v标志构建一个管道grep语句以消除这些模式,即我有一个文件,比如 negativelist ,包含以下模式:
Hello
World
Java
因此,我逐行读取此文件并按如下方式构造管道grep语句,以从示例文件中消除这些模式, inputfile
grep -v“Hello”inputfile | grep -v“世界”| grep -v“Java”
但是,在否定列表中声明特殊字符时,我遇到了问题。虽然我通常会使用grep -v'*' inputfile 来消除包含星号的所有行,但我似乎无法使其工作。使用否定列表中的单引号转义星号似乎没有帮助。有关如何逃避星号的任何想法,以便我能够消除包含它的行,使用我当前的方法围绕从否定列表读取的双引号行吗?
为了澄清,我有以下一组约束:
此外,定义一个模式,如Hello。* World,以消除表格中的所有行
Hellotest1World,或
Hellotest2World
在否定列表中定义似乎无法正常工作时,星号可能无法正常转义。命令行上的以下语句正常工作:grep -v“Hello。* World” inputfile ,即它正确地消除了包含Hello的所有行,后面跟着World
之间的任何字符答案 0 :(得分:2)
您应该使用fgrep
而不仅仅是grep
,它会执行完全匹配而不会展开任何内容。
例如:
$ cat /tmp/a
aaa
zzz
eee
***
rrr
ttt
yyy
$ fgrep -v -e 'aaa' -e '*' -e zzz -e yyy /tmp/a
eee
rrr
ttt