linux – 删除文件中匹配一个字符串但不匹配另一个字符串的行 – SED,BASH?

前端之家收集整理的这篇文章主要介绍了linux – 删除文件中匹配一个字符串但不匹配另一个字符串的行 – SED,BASH?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我想删除文件中包含“test”一词的所有行,但如果该行包含“test @”,那么我不想删除它.

可能有一些时髦的方式用sed这样做,但我很挣扎,我试着用sed写一个bash循环,但这可能是愚蠢的.

@H_404_7@filetest=/tmp/filetest filetest_tmp=/tmp/filetest.tmp< line_num=0 while read line; do line_num=$(($line_num+1)) if [[ $line == *rootsh* ]] && [[ $line != *root@* ]] then sed -e "${line_num}"'d' $filetest >> $filetest_tmp fi done < $filetest cp $syslog_tmp $filetest

你可以告诉我,我是一个新手:(

最佳答案
@H_404_7@sed -e '/test/{/test@/!d;}'

第一个模式匹配包含’test’的行;第二种模式删除行,除非它们匹配’test @’.

测试数据文件

@H_404_7@aaaa bbbtestbbb ccctest@ccc test! dddd

输出

@H_404_7@aaaa ccctest@ccc dddd

这似乎符合您的要求.

猜你在找的Linux相关文章