例如,包含此类内容的文件,不包含任何重复条目:
100
10012
12345
12387
123
123456344
我想在上面的文件中搜索100
和12345
,如果模式匹配,则删除该行。
此外,我想在一个命令中执行此操作。
答案 0 :(得分:7)
我只想做
egrep -v '^(100|12345)$' file.in > file.out
或者,用sed
sed -n '/^\(100\|12345\)$/!p' file.in > file.out
你甚至不需要第二个文件:
sed -ni '/^\(100\|12345\)$/!p' file.in
(请参阅注释;严格来说,会创建一个临时文件,然后替换输入文件,但这对用户来说是透明的)
如您所见,正则表达式或多或少保持不变(除了您不需要在egrep中转义()|)。如果一行中有多个单词,但只想匹配整个单词,则可以使用以下sed正则表达式:
sed -n '/\<\(100\|12345\)\>/!p' file.in > file.out
这会匹配行100
,123 100 123
但不匹配123 100123
。
要使用grep
获得相同的行为,请使用-w
选项(感谢Janito):
egrep -wv '(100|12345)' file.in > file.out
答案 1 :(得分:2)
sed '/\(100\|12345\)/d' file.txt
答案 2 :(得分:1)
如果数字必须完全匹配,您可以使用这样的扩展grep模式:
grep -v -E '^(100|12345)$' inputfile
这说:打印所有非100或12345 的行。如果数字只需要在行的开头匹配,请使用
grep -v -E '^(100|12345)' inputfile
如果他们可以在任何地方匹配,请使用
grep -v -E '(100|12345)' inputfile
答案 3 :(得分:1)
使用sed
的一种方式:
sed '/^\(100\|12345\)$/d' file.txt
结果:
10012
12387
123
123456344