
「line1\n\nline2\nline3」というテキストがあり、それをコンソールで表示したり、テキストエディタにパイプしたいとします。
line1
line2
line3
したがって、特殊文字が評価されます。正規表現を変更せずにこれを実行できますか?
答え1
Bashにはバックスラッシュ拡張printf
機能が組み込まれており、引用符で囲まれていないシェルコマンドで使用できるように文字列書式設定をサポートしています(たとえば、シェルがバックスラッシュとして特別に扱うすべての文字をエスケープします)。%b
%q
つまり、Bashでは次のことができます。
printf '%b\n' 'line1\n\nline2\nline3'
得るために
line1
line2
line3
後ろに改行したくない場合は、line3
代わりに使用してくださいprintf '%b' 'line1\n\nline2\nline3'
。
逆関数(%q
)も便利です。
printf '%q' '(foo $bar baz]'
出力
\(foo\ \$bar\ baz\]
次のようにバックスラッシュを含む文字列を含むBash変数がある場合
myvar='line1\n\nline2\nline3'
拡張エスケープシーケンスを使用できます。
mytext=$(printf '%b' "$myvar")
エスケープシーケンスを含むリテラル文字列のみを指定するには、次のようにします$''
。
mytext=$'line1\n\nline2\nline3'
答え2
インラインエコーを使用してください。
$ echo -e "line1\n\nline2\nline3"
line1
line2
line3