シェルスクリプトを使用して、文字列を複数の改行文字に接触する文または段落に置き換えようとします。代替文字列は実行時に生成されます。
たとえば、
sed /string_to_be_replaced/Replacement(newline character) string (newline character)/g
すべてのコメント/アイデアを歓迎します。ありがとうございます!
答え1
GNUを使用してくださいsed
。
mline="this is\na line\nin multiple\nlines"
sed "s/PATTERN/${mline}/g" <<<"PATTERN here."
this is
a line
in multiple
lines here.
入力に/
特殊文字が含まれている&
場合、または次のものと一致する場合パターンマッチング存在するsed
。グローバルパターン置換を使用して//
すべてのesを置換またはエスケープし、すべての/
パターンを\&
。
sed "s/PATTERN/${mline//\//\\/}/g; s/PATTERN/\&/" <<<"PATTERN here."
あるいは、別のsed
サブサイト区切り文字を使用して&
再エスケープする方が良いでしょう。
sed "s:PATTERN:${mline//&/\\&}:g" <<<"PATTERN here."
最後に実際に動作させるには、まずsedとして使用できるようにすべてをEnter交換する必要があります。だから\n
\\n
\n
実際の入力では、複数行を入力します。
mline="th&is is
a line
in mul/tiple
line/s"
注文する:
aline="$(sed -z 's:\n:\\n:g;$s:\\n$::' <<<"$mline")
sed "s:PATTERN:${aline//&/\\&}:g" <<<"PATTERN here."
出力は次のとおりです
th&is is
a line
in mul/tiple
line/s here.