加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

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

发布时间:2020-05-23 11:01:11 所属栏目:Linux 来源:互联网
导读:我想删除文件中包含“test”一词的所有行,但如果该行包含“test @”,那么我不想删除它.可能有一些时髦的方式用sed这样做,但我很挣扎,我试着用sed写一个bash循环,但这可能是愚蠢的.filetest=/tmp/filetest filetest_tmp=/tmp/filetest.tmp line_num=0 while re

我想删除文件中包含“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

这似乎符合您的要求.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读