編集:最初にリクエストを明確にしなかったので申し訳ありません。実際、バックスラッシュエスケープ方式で作成された文字列にアクセスできず、より明確にするために例を修正しました。今得た2つの答えでは、最初に文字列にバックスラッシュを含める必要がありますが、そうではありません。
難しい文字を多く含むことができる文字列があり、二重引用符などで入力すると、同じ文字列が生成されるようにエスケープ方式でファイルに書きたいと思います。とPerlの機能を試してみましたが、そのecho -e
参照は異なります。perl
shell-quote
quotemeta
例:
# I have a file containing difficult characters:
$ cat text
line0'field0
line1 field1"
$ cat -v text
line0'field0
line1 field1"
二重引用符を含む予想生出力:
"line0'field0\nline1\tfield1\""
すでに組み込みのソリューションがあると確信しています。
ベストアンサー1
修正されたフレーズに返信する
心に浮かぶ(そして広く使われている)唯一のツールはですが、sed
まさにきれいではありません。
sed ':a;N;$!ba;s/\n/\\n/g;s/\t/\\t/g'
だから...
$ cat file
line0'field0
line1 field1"
$ sed ':a;N;$!ba;s/\n/\\n/g;s/\t/\\t/g' file
line0'field0\nline1\tfield1"
感謝の言葉:https://stackoverflow.com/questions/1251999/how-can-i-replace-a-newline-n-using-sed
元の声明に返信
質問を正しく理解したら、あなたは次のようなものを探していると思います(これはbashにあります。):
$ doublequoted="line0'field0\nline1\tfield1\""
$ foo="$(echo -e "${doublequoted//\\/\\\\}")"
$ echo $foo
line0'field0\nline1\tfield1"
私が間違って理解した場合は、何を探しているのかを明確にしてください。