如何在包含字符串的段落的每一行的开头插入一个字符

如何在包含字符串的段落的每一行的开头插入一个字符

这里有不同的请求:我有一个文本文件,我需要@在每个段落的开头放置一个字符(段落=用空行分隔),其中包含特定的搜索字符串。例如

hello

this
is
a
test

hi

应该产生:

hello

@this
@is
@a
@test

hi

我有以下用于选择性打印段落的内容,但它不会#在每行的开头插入字符:

sed -e '/./{H;$!d;}' -e 'x;/SEARCH_STRING/!d;'

有任何想法吗?提前致谢!

答案1

这在很大程度上不是用(“用换行符加上一个附加字符替换换行符”)替换最后的!d(“不删除”)的问题吗?s/\n/\n@/g;

$ cat file
hello

this
is
a
test

hi


$ sed -e '1{x;$!d}' -e '/./{H;$!d;}' -e 'x;/test/ s/\n/\n@/g;' file
hello

@this
@is
@a
@test

hi

额外的表达式1{x;$!d}只是防止额外的空行,否则会因将第一行附加到(空)保留空间而产生额外的空行。

相关内容