最初の行では、printf '%s \ n'がエコーされますが、\記号は印刷されません。

最初の行では、printf '%s \ n'がエコーされますが、\記号は印刷されません。

file1 には次の設定があります。

'a 1-61' 'a 7134-7194'

file1の先頭に印刷しようとしています。

sed -e "1s|^|printf '%s\n'|" < file1 > file2

しかし、私は理解しています

printf '%s
''a 1-61' 'a 7134-7194'

動作するように\記号を除外する方法がわかりません。予想される出力は次のとおりです。

printf '%s\n' 'a 1-61' 'a 7134-7194'

ベストアンサー1

GNU sedはこれを\n改行文字を表すと解釈するので、結果を得ることができます。これを防ぐには、文字列をsedに渡してエスケープする必要があります\\n。コマンドラインに二重引用符で囲まれた文字列があるため、それをエスケープするには別のバックスラッシュを追加する必要があります。 (または両方のバックスラッシュをエスケープします。二重引用符で囲まれた文字列はsoとfinalの両方を提供するため、ここでは重要ではありません\n。)\n\\\n\\\\n\\n

また、printfの最初の引数と2番目の引数を区切る空白がありません。

$ sed -e "1s|^|printf '%s\\\n' |" < file1
printf '%s\n' 'a 1-61' 'a 7134-7194'

おすすめ記事