我有样品:
This is a test
localhost% This is a test
第一个This is a test
将重新出现在下一行的 txt 文件中,该localhost%
行之前会有一些字符。This is a test
如果下一行包含类似内容,我想删除第一行<arbitrary characters>% This is a test
所以我想检查两行,如果前一行This is a test
与下一行匹配localhost% This is a test
(请注意%
),然后删除前一行。
我怎样才能做到这一点?
答案1
或许:
sed '$!N;/^\(.*\)\n.*% \1$/!P;D'
也就是说,通过使用withsed
来处理滚动的 2 行模式空间,如果在 后的第二行末尾 ( )处找到(捕获)第一行,则删除第一行(通过不 ( )打印它来跳过它) 。N
D
!
P
\(...\)
\1
$
"% "
这也应该适用于以下情况:
This is a test foo% This is a test bar% foo% This is a test
(删除前 2 行)。
答案2
您可以使用以下命令
sed -i "/This is a test/s/^This is a test$//g" test && sed -i '/^$/d' test
输入文件
猫测试
This is a test
localhost% This is a test
执行上述命令后
输出文件
猫测试
localhost% This is a test