バックスラッシュエスケープシーケンスで生成できるすべての文字を対応するエスケープシーケンスに置き換えます。

バックスラッシュエスケープシーケンスで生成できるすべての文字を対応するエスケープシーケンスに置き換えます。

編集:最初にリクエストを明確にしなかったので申し訳ありません。実際、バックスラッシュエスケープ方式で作成された文字列にアクセスできず、より明確にするために例を修正しました。今得た2つの答えでは、最初に文字列にバックスラッシュを含める必要がありますが、そうではありません。

難しい文字を多く含むことができる文字列があり、二重引用符などで入力すると、同じ文字列が生成されるようにエスケープ方式でファイルに書きたいと思います。とPerlの機能を試してみましたが、そのecho -e参照は異なります。perlshell-quotequotemeta

例:

# 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"

私が間違って理解した場合は、何を探しているのかを明確にしてください。

おすすめ記事