1

我想在文档中搜索一个短语。
但也许这句话被分成了两行。
所以我想做的是:
搜索:
line1 and line2
line2 and line3
line3 and line4
......

我是初学者,我想练习使用 sed。
那么,我怎样才能用 sed 做到这一点呢?
有任何想法吗?


这不起作用。

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

1)sed读取第一行和第二行,然后搜索。
2)sed读取第三行和第四行,然后搜索。
......
所以如果line2和line3中的那句话,我会错过的。
我可以阅读上一行吗?


更新

感谢@Beta 的帮助。

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

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

我已阅读手册。

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

sed -n 'N;P' test.txt 

1)sed 读取第一行和第二行,然后打印第一行。
2)sed清空其模式空间然后读取第三和第四行,然后打印第三行。
我对吗?

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

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

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



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

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

4

1 回答 1

5

有不止一种方法可以做到这一点。这与您尝试的接近:

sed '$!N;s/line2.line3/line23/;P;D;'
于 2013-09-17T03:11:52.297 回答