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'