例如,包含此类内容的文件,其中不包含任何重复条目:
100
10012
12345
12387
123
123456344
Run Code Online (Sandbox Code Playgroud)
我想搜索100并12345在上面的文件中删除该模式匹配的行.
我也希望在一个命令中执行此操作.
我会这么做的
egrep -v '^(100|12345)$' file.in > file.out
Run Code Online (Sandbox Code Playgroud)
或者,用sed
sed -n '/^\(100\|12345\)$/!p' file.in > file.out
Run Code Online (Sandbox Code Playgroud)
你甚至不需要第二个文件:
sed -ni '/^\(100\|12345\)$/!p' file.in
Run Code Online (Sandbox Code Playgroud)
(请参阅注释;严格来说,会创建一个临时文件,然后替换输入文件,但这对用户来说是透明的)
如您所见,正则表达式或多或少保持不变(除了您不需要在egrep中转义()|).如果一行中有多个单词,但只想匹配整个单词,则可以使用以下sed正则表达式:
sed -n '/\<\(100\|12345\)\>/!p' file.in > file.out
Run Code Online (Sandbox Code Playgroud)
这将匹配线100,123 100 123但不匹配123 100123.
要获得相同的行为grep,请使用该-w选项(感谢Janito):
egrep -wv '(100|12345)' file.in > file.out
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11005 次 |
| 最近记录: |