有没有办法获得匹配的图案线的行号?

时间:2011-07-18 12:13:01

标签: bash

例如,文本文件包含:

dfsdfsd
f
dsf
dsf
dsf
dsf
sdafadfdasfdsfd
sf
sdfasdfdasfdsfsdf
sd
fsdfdsaf

然后,我想找到一种方法来获得sf的行号 并在sf

之前插入一个段落

有没有办法在bash编程中做到这一点???谢谢

3 个答案:

答案 0 :(得分:1)

如果您想查找行号,可以使用grep -n

如果你只是想在前一行插入一行,你可以像这样使用sed

sed "s/sd/paragraph\nsd/" file

这将在“sd”行的上方插入文本“paragraph”。

仅在第一场比赛中执行此操作:

sed "0,/sd/ { s/sd/paragraph\nsd/ }" file

在这里,我们只匹配第一个匹配的“sd”行,因此任何后来的sd都不匹配。

答案 1 :(得分:1)

sed的{​​{3}}不仅仅是s///。要在每个匹配行之前插入文本:

sed '/pattern/ i \
text to be \
inserted goes \
here'

答案 2 :(得分:0)

可能是正则表达式替换,将\nsf\n替换为\n\nsf\n或类似的东西,具体取决于您的具体要求。不能获得实际的行号,但如果您想要做的只是插入段落,那可能没有必要。