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在模式空间中只有一个字符串,则它会加入另一个字符串 为了防止第一个字符串出现模式,你应该修改脚本: sed '1{/PINITIAL BALANCE/{N;N;d}};/n/!N;/n.*n/!N;/n.*n.*PINITIAL BALANCE/{$d;N;N;d};P;D' 但是,如果您在字符串中有另一个PINITIAL BALANCE将被删除,它将失败.然而,其他解决方案也失败=) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |