微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

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

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

测试数据文件

aaaa
bbbtestbbb
ccctest@ccc
test!
dddd

输出

aaaa
ccctest@ccc
dddd

这似乎符合您的要求.

原文地址:https://www.jb51.cc/linux/440564.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐