答案1
根据文章中提供的示例sed
- 25 个删除文件中的一行或一个模式的示例我们可以编写这个命令:
sed '/^MX/{/sum/!d}' in-file # just output the result
sed '/^MX/{/sum/!d}' in-file -i.bak # change the file and create a backup copy
sed '/^MX/{/sum/!d}' in-file > out-file # create a new file with different name/path
这是perl
解决方案 -来源:
perl -ne '/^MX((?!sum).)*$/ || print' in-file
perl -ne '/^MX((?!sum).)*$/ || print' in-file > out-file
相同的正则表达式将适用于grep -P
(更多解释)但是,上面的结构字面意思是如果不是则打印,为了保留匹配行的输出,grep
我们需要以下-v
选项:
grep -vP '^MX((?!sum).)*$' in-file
grep -vP '^MX((?!sum).)*$' in-file > out-file
这也是awk
解决方案:
awk '! /^MX/ || /sum/ {print}' in-file
awk '! /^MX/ || /sum/ {print}' in-file > out-file
使用在线工具编写正则表达式相对容易,因为regextester.com。
生产力比较:
$ du -sh in-file
2.4M in-file
$ TIMEFORMAT=%R
$ time grep -vP '^MX((?!sum).)*$' in-file > out-file
0.049
$ time sed '/^MX/{/sum/!d}' in-file > out-file
0.087
$ time awk '! /^MX/ || /sum/ {print}' in-file > out-file
0.090
$ time perl -ne '/^MX((?!sum).)*$/ || print' in-file > out-file
0.099