例如,一个不包含重复条目的具有以下内容的文件:
100
10012
12345
12387
123
123456344
我希望在上述文件中搜索100
和12345
,如果匹配到该模式,则删除该行。
此外,我希望用单个命令完成此操作。
egrep -v '^(100|12345)$' file.in > file.out
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
100
而不是 10012
,你应该添加 -w
标志来指示 grep 匹配整个单词。 - Janito Vaqueiro Ferreira Filhosed -i
使用临时文件。 - William Pursellsed '/\(100\|12345\)/d' file.txt
grep -v -E '^(100|12345)$' inputfile
grep -v -E '^(100|12345)' inputfile
如果它们能够在任何地方匹配,请使用
grep -v -E '(100|12345)' inputfile
使用 sed
的一种方法:
sed '/^\(100\|12345\)$/d' file.txt
结果:
10012
12387
123
123456344