cat -e file.txt
与える:
{"yellow":"mango"}^M$
^M$
{"yellow":"banana"}^M$
^M$
{"yellow":"blabla"}^M$
^M$
そして私はただ以下を持ちたいのです:
{""yellow":"mango"}^M$
{"yellow":"banana"}^M$
{"yellow":"blabla"}^M$
フォルダー内の txt 拡張子を持つすべてのファイルに対して実行します。そこで試してみました:
find . -type f -name "*.txt" -print0 | xargs -0 sed -i "s/^M$^M$/^M$/g"
無駄でした。誰かもっと良いアイデアを持っていますか?
head -n 3 file.txt | od -bc
結果:
0000000 173 042 171 145 154 154 157 167 042 072 042 155 141 156 147 157
{ " y e l l o w " : " m a n g o
0000020 042 175 015 012 015 012 173 042 142 141 142 141 142 042 072 042
" } \r \n \r \n { " b a b a b " : "
0000040 155 141 156 147 157 042 175 015 012
m a n g o " } \r \n
0000051
これ:
awk 1 RS='\r\n' ORS= < file.txt
新しい行を完全に削除します (これは良くありません。各行の連続する 2 行のうち 1 行を保持したいのですが、何らかの処理が行われます)。
答え1
を使用できますsed -z 's/\r\n\r\n/\r\n/g'
。
通常、sed
一度に 1 行のみ動作します。 この-z
オプションを使用すると、テキスト ファイルでは通常存在しないバイトsed
で区切られた行に対して動作し0
、ファイル全体が 1 行として扱われ、改行を置き換えることができます。
(見つかったスタックオーバーフローおよび説明を追加しました)
答え2
改行のみを含む行を削除することもできます。
GNU Sed の場合:
sed '/^\r$/d' file
最小限だが POSIX 準拠のマシンの場合 (ここでは Printf を使用してキャリッジ リターンを生成する必要があります):
sed "/^$(printf "\r")$/d" file
^
行頭と最後$
の行末 ( \n
) に一致します。
例えば:
$ cat -e file
AB^M$
^M$
CB^M$
^M$
$ sed '/^\r$/d' file|cat -e
AB^M$
CB^M$
答え3
すべての空白行を削除しても問題ない場合は、次のようにします。
perl -wlne '/\S/ and print' old_file > new_file
ファイルを上書きしたい場合は、-i
(インプレース) スイッチを使用できます。
perl -wlni.bak -e '/\S/ and print' file1 file2 file3 ...
上記の行は、元のファイルをファイルとしてコピーします*.bak
。バックアップが必要ない場合は、.bak
次のようにこの部分を省略できます。
perl -wlni -e '/\S/ and print' file1 file2 file3 ...
(ワイルドカードも使用できるので、 の代わりに とfile1 file2 file3 ...
書くこともできますfile*
。)
この方法の利点は、ファイルごとに 1 回実行するのではなく、すべてのファイルを一度に変更できることです。
ただし、覚えておいてください: これは、少なくとも 1 つの空白以外の文字を含む行のみを保持します。したがって、行が 5 つのスペース、タブ、キャリッジ リターン、および改行文字のみで構成されている場合は、保持されません。
答え4
Raku (以前は Perl6 と呼ばれていた言語) を使用する
~$ raku -ne '.put if /\S/ ;' test_blank.txt
{"yellow":"mango"}
{"yellow":"banana"}
{"yellow":"blabla"}
上記の例では、空白以外の文字 (\S
空白以外の 1 文字に一致) を含む行のみを出力します。非常に読みやすいバージョンを以下に示します。
~$ raku -ne '.put if .chars;' test_blank.txt
{"yellow":"mango"}
{"yellow":"banana"}
{"yellow":"blabla"}
ありがとう。