如何使用sed搜索每两行中的一个短语

时间:2013-09-17 03:01:37

标签: bash search sed

我想在文档中搜索一个短语 但也许这句话分为两行 所以我想做的是:
搜索:
line1和line2
第2行和第3行 第3行和第4行 ......

我是初学者,我想用sed练习。
那么,我怎么能用sed呢? 有什么想法吗?


这不起作用。

$ sed 'N;s/line2.line3/line23/' test.txt 
line1
line2
line3
line4
line5

1)sed读取第一行和第二行,然后搜索。
2)读取第三行和第四行,然后搜索。
......
所以,如果第2行和第3行中的短语,我会错过它 我可以阅读上一行吗?


更新

感谢@Beta的帮助。

sed '$!N;s/line2.line3/line23/;P;D;'

有效。但我还是有点困惑 还有一些问题。

我已阅读手册。

  

n:读取模式空间中的下一行输入。
  N:将下一行输入附加到模式空间中   d:删除模式空间。开始下一个周期   D:删除模式空间中的第一个嵌入换行符。开始下一个循环,但如果模式空间中仍有数据,则跳过读取输入。

sed -n 'N;P' test.txt 

1)读取第一行和第二行,然后打印第一行 2)sed清空其图案空间然后读取第三和第四行,然后打印第三行 我是对的吗?

sed -n 'N;P;D' test.txt 

1)读取第一行和第二行,然后打印第一行 2)sed不要清空它的模式空间然后读取第三行,然后打印第二行 我是对的吗?

为什么“下一行”在上面2个命令的COMMAND N和n中有不同的行为?



sed '$!N;s/line2.line3/line23/;P;D;'

ps.我想“$!”没有必要。

1 个答案:

答案 0 :(得分:5)

有多种方法可以做到这一点。这与你的尝试很接近:

sed '$!N;s/line2.line3/line23/;P;D;'