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

shell – 在bash中匹配前后删除行(使用sed或awk)?

发布时间:2020-12-15 17:00:59 所属栏目:安全 来源:网络整理
导读:我试图从一个充满交易的文件中删除模式匹配两侧的两行. IE浏览器.找到匹配然后删除它之前的两行,然后删除它后面的两行,然后删除匹配.将此写回原始文件. 所以输入数据是 D28/10/2011T-3.48PINITIAL BALANCEM^ 我的模式是 sed -i '/PINITIAL BALANCE/,+2d' tes
我试图从一个充满交易的文件中删除模式匹配两侧的两行. IE浏览器.找到匹配然后删除它之前的两行,然后删除它后面的两行,然后删除匹配.将此写回原始文件.

所以输入数据是

D28/10/2011
T-3.48
PINITIAL BALANCE
M
^

我的模式是

sed -i '/PINITIAL BALANCE/,+2d' test.txt

但是,这只是在模式匹配后删除两行,然后删除模式匹配.我无法使用sed以任何逻辑方式从原始文件中删除所有5行数据.

sed会这样做:
sed '/n/!N;/n.*n/!N;/n.*n.*PINITIAL BALANCE/{$d;N;N;d};P;D'

它的工作方式如下:

>如果sed在模式空间中只有一个字符串,则它会加入另一个字符串
>如果只有两个加入第三个
>如果它确实与BALANCE模式化LINE LINE LINE它会加入两个跟随的字符串,删除它们并在开头
>如果没有,它会从模式打印第一个字符串并将其删除,然后在开始时不刷模式空间

为了防止第一个字符串出现模式,你应该修改脚本:

sed '1{/PINITIAL BALANCE/{N;N;d}};/n/!N;/n.*n/!N;/n.*n.*PINITIAL BALANCE/{$d;N;N;d};P;D'

但是,如果您在字符串中有另一个PINITIAL BALANCE将被删除,它将失败.然而,其他解决方案也失败=)

(编辑:李大同)

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

    推荐文章
      热点阅读