web-dev-qa-db-ja.com

改行をエスケープシーケンスに置き換えるにはどうすればよいですか?

sedを使用して、文字列リテラルでの使用に適した特定の文字を含むテキストを作成するのは簡単です。

sed "s/\\\\/\\\\\\\\/g"
sed "s/\\\"/\\\\\\\"/g"

しかし、改行文字を含むテキストファイルで同様のことを行うにはどうすればよいですか?

3
Melab

使用する:

sed ':a;N;$!ba;s/\n/\\n/g'

sedを使用して改行(\ n)を置き換えるにはどうすればよいですか? ここでの質問に一致する代わりに、エスケープされた改行文字を置き換えます。

5
vossad01

sedは行ベースであるため、改行文字を置き換えようとすると問題が発生する可能性があります。

sedの公式ドキュメントでは、改行文字について具体的に言及しており、sedに渡される前に改行文字が削除されると述べています。

'tr'の方がおそらくここに適していると思います。

例として、改行文字をスペースに置き換えるには:

tr '\n' ' ' < inputfile
1
David Moylan

拡張したい David Moytan の解決策:

cat /etc/passwd | Perl -e 'while(<>) { $_ =~ s/[\r\n]/__NEWLINE__/g; print "$_" }'
0
theoden8

私もこの問題を抱えていました。

\ a関数を使用して、すべての改行を適切なエスケープシーケンスで開始し、結果の関数をecho -nにパイプして、改行を抑制します。

echo -n $(sed '\a
\\n');

Sedコマンドの前に、sedしているものを括弧で囲んでください。

0
Kaeden Wile