例如,内容如下的文件,其中不包含任何重复条目:
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
sed '/\(100\|12345\)/d' file.txt
如果数字必须完全匹配,您可以使用扩展的 grep 模式,如下所示:
grep -v -E '^(100|12345)$' inputfile
这说:打印所有不是 100 或 12345 的行。如果数字只需要在行首匹配,请使用
grep -v -E '^(100|12345)' inputfile
如果他们可以在任何地方匹配,请使用
grep -v -E '(100|12345)' inputfile
一种使用方式sed
:
sed '/^\(100\|12345\)$/d' file.txt
结果:
10012
12387
123
123456344