ここに別の要求があります。テキストファイルがあり、@
特定の検索文字列を含む各段落(段落=空白行で区切られた)の先頭に文字を入れる必要があります。例えば
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}
(空の)予約スペースに最初の行を追加することによって発生する可能性がある追加の空行を防ぎます。