例如,一个包含以下内容的文件,其中不包含任何重复条目:
100
10012
12345
12387
123
123456344
我想在上面的文件中搜索
100
和 12345
并在模式匹配时删除该行。我也想在一个命令中做到这一点。
最佳答案
我会简单地做
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
关于unix - 在文件中搜索精确的多个模式并在模式匹配时删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12894762/