次のテキストを含む複数のファイルがあります。
20~02~19~05-01-52
2249\\\2249\\\2249\\\2249\\\2249\\\2249\\\2248\\\
Sedまたは別のLinuxコマンドを使用して、\\\
を改行で置き換えたいのですが。
sed 's|\\\\\\|\n|g' filename
は、GNU sed
を使用している場合に使用します。
POSIX sed
が必要な場合、これでうまくいくはずです(かなりのエスケープです!):
sed 's|\\\\\\|\
|g' filename
繰り返しを簡単にサポートできるより高度な正規表現があるため、ここではPerlを使用します。だから、このようなもの:
$ Perl -pe 's/\\{3}/\n/g' file
20~02~19~05-01-52
2249
2249
2249
2249
2249
2249
2248
-pe
は、「-eで指定されたスクリプトを適用した後に各入力行を出力する」ことを意味します。スクリプト自体は、単純に3 \
改行付き。 \\
の代わりに \
なぜなら \
はエスケープする必要があります。
sed
がサポートしている場合(GNU sedがサポートしている場合)、同じアプローチを使用できます。
$ sed -E 's/\\{3}/\n/g' file
20~02~19~05-01-52
2249
2249
2249
2249
2249
2249
2248
awk
の場合:
awk '{gsub(/\\{3}/, RS)}1' file
Sedの使用:sed -n 's/\\\\\\/\n/g; p' filename.txt
。
セミコロンの後に「p」を付けることが重要です。そうしないと、置換が行われない最初の行が印刷されません。 3つの円記号が3つの円記号のエスケープ文字として使用されているため、6つの円記号。グローバルの場合は「g」。自動印刷を回避するための「-n」。
zsh
printf '%s\n' ${(s:\\\:)"$(<FILE)"}
シリアルデータを受信するコードを書き直し、次のコードを使用して改行を生成しました。投稿ありがとうございます。これでしばらく勉強し続けます。
sed -i 's/\\n/\n/g' *.txt
GNU sed
:
sed -E 's;([0-9]{4}).{3};\1\n;g' < file