2017-07-14 93 views
0

我试图找到匹配后的第一个空行并将其替换为我的文本。例如,如果模式是作者:sed找到匹配后的第一个空行并替换

Authors 
----- 
author1 
author2 
author3 
... 
authorN 

----- 

我希望SED附加额外的作者和新行:

Authors 
----- 
author1 
author2 
author3 
... 
authorN 
authorAdded 

----- 

这些图案是整个文件数据库变量的长度和位置。

+0

是否有多个这样的块? https://stackoverflow.com/questions/38972736/how-to-select-lines-between-two-patterns会让你开始...你可以使用[{}分组](https://www.gnu.org /software/sed/manual/sed.html#Common-Commands)只能在匹配的地址上执行命令 – Sundeep

回答

0

我觉得awk这里是您最好的选择:

$ cat test.txt 
Count 
----- 
1 
2 
3 
4 
5 

----- 

$ awk '{ if ($1=="") { print last+1; last=last+1; print ""; } else { print; last=$1 } }' test.txt 
Count 
----- 
1 
2 
3 
4 
5 
6 

----- 
+0

这很有帮助,但这些文件相当大,所以如果可以的话,我宁愿进行就地编辑。我编辑了这个例子以显示更多我想要做的事情。 – John

+0

好 - 如果你有'Author5',那么你想添加'Author6'?如果你有'Zimbabwe442'你想添加津巴布韦443'? – Jack

+0

不,它是随意的,列表因文件而异,所以它可能是John,Shannon,Jack,但我想每次都添加Jared。所以我想每次只添加相同的字符串,只是作者的数量有所不同。 – John

0

这可能为你工作(GNU SED):

sed '/^Authors/!b;:a;n;/./ba;inew author' file 

打印线等那些与Authors像往常一样开始了。然后像往常一样打印非空行,并在第一个空行插入所需的字符串。注:空行也将被打印