文字列を含む段落の各行の先頭に文字を挿入する方法

文字列を含む段落の各行の先頭に文字を挿入する方法

ここに別の要求があります。テキストファイルがあり、@特定の検索文字列を含む各段落(段落=空白行で区切られた)の先頭に文字を入れる必要があります。例えば

hello

this
is
a
test

hi

以下を生成する必要があります。

hello

@this
@is
@a
@test

hi

#段落を選択的に印刷するには、以下がありますが、各行の先頭に文字を挿入しません。

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

どんなアイデアがありますか?よろしくお願いします!

答え1

これは一般的に!d最後(「削除せずに」)を(「改行文字と1つの追加文字に置き換える」)に置き換える問題ではありませんか?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}(空の)予約スペースに最初の行を追加することによって発生する可能性がある追加の空行を防ぎます。

関連情報