web-dev-qa-db-ja.com

sedは '\\\'を改行Linuxに置き換えます

次のテキストを含む複数のファイルがあります。

20~02~19~05-01-52
2249\\\2249\\\2249\\\2249\\\2249\\\2249\\\2248\\\

Sedまたは別のLinuxコマンドを使用して、\\\を改行で置き換えたいのですが。

4
1885

sed 's|\\\\\\|\n|g' filenameは、GNU sedを使用している場合に使用します。

POSIX sedが必要な場合、これでうまくいくはずです(かなりのエスケープです!):

sed 's|\\\\\\|\
|g' filename
11
Quasímodo

繰り返しを簡単にサポートできるより高度な正規表現があるため、ここでは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
8
terdon

awkの場合:

awk '{gsub(/\\{3}/, RS)}1' file
4
Freddy

Sedの使用:sed -n 's/\\\\\\/\n/g; p' filename.txt

セミコロンの後に「p」を付けることが重要です。そうしないと、置換が行われない最初の行が印刷されません。 3つの円記号が3つの円記号のエスケープ文字として使用されているため、6つの円記号。グローバルの場合は「g」。自動印刷を回避するための「-n」。

2
srgk26
  • zsh
printf '%s\n' ${(s:\\\:)"$(<FILE)"}
2
guest

シリアルデータを受信するコードを書き直し、次のコードを使用して改行を生成しました。投稿ありがとうございます。これでしばらく勉強し続けます。

sed  -i 's/\\n/\n/g' *.txt
0
1885

GNU sed

sed -E 's;([0-9]{4}).{3};\1\n;g' < file