空の行が多いドキュメントがあります。
一緒に2つ以上ある場合、どうすれば削除できますか。
sed "s/\n\n//"ファイルを試しましたが、うまくいきませんでした。エラーなし。
空の行が多いドキュメントがあります。
一緒に2つ以上ある場合、どうすれば削除できますか。
sed "s/\n\n//"ファイルを試しましたが、うまくいきませんでした。エラーなし。
回答:
空の行を削除するだけです:
sed '/^$/d'
sedは行指向であるため、そのバイトが改行である場合を除き、「特定のバイトが2つ以上」という観点から考えるとうまくいきます。次に、ライン全体で機能する何かを考える必要があります。
sed「パターンスペース」/「ホールドスペース」機能を介して複数の行を処理できます。しかし、私はそれが複雑すぎると感じています。;-)
1!(1行目を除くすべてに一致)sed '1!{/^$/d'}。
sedます。ファイルを作成すると、基本的に同じ名前の既存のファイルが削除されます。 sed '/^&/d' file.txt > otherfile.txt働くでしょう。
の必要はありませんsed。grepしましょう:
grep .
(つまりgrep、SPC、ドット、少なくとも1文字を含む任意の行に一致します)。
またあります:
tr -s '\n'
(改行文字のシーケンスを1つに絞り込みます)。
クリスが述べたように、空の行を削除することは上記の最初の解決策や他のほとんどの回答がここに焦点を当てているため)最初の行が空の場合に要求される改行文字のシーケンスを絞ることと同じではないため、両方は同等ではありません最初の行を空にするために先頭の改行文字を1つだけ使用します。
@Bruce Edigerの答え を見たsedこれは最適なツールではありません。これは行ベースであり\n、行末文字として処理されるため、複雑になります。sedことは、仕事に最適なツールかもしれませんが、他にもいくつかのオプションがあります。
Perl
perl -ne 'print if /./' file.txt
または
perl -pe '$/=""; s/\n+/\n/;' file.txt
$ /
入力レコード区切り文字。デフォルトでは改行。これは、「ライン」とは何かというPerlの考え方に影響を与えます。null文字列に設定されている場合、空行をターミネータとして扱うなど、awkのRS変数のように機能します(空行にはスペースやタブを含めることはできません)。複数文字の文字列に設定して、複数文字のターミネータに一致させるか、undefに設定してファイルの最後まで読み込めます。ファイルに連続した空行が含まれている場合、「\ n \ n」に設定すると、「」に設定した場合とは少し異なることを意味します。「」に設定すると、2つ以上の連続した空行が単一の空行として扱われます。「\ n \ n」に設定すると、改行であっても、次の入力文字が次の段落に属すると盲目的に想定されます。
gawk / awk
awk '$1' file.txt
これは投稿された例では機能しますが、@ Stephane Chazelasが指摘したように、最初のフィールドが " likes "である行も削除し0ます。これはより堅牢です。
awk NF file.txt
perl -pe 's/\n+/\n/ file.txtは、入力レコードの区切り文字はこの使用には無関係です。
perl -peまたはperl -neラインによって作業ライン。\n+1行にのみ適用されるため、一致しません。そのため、設定$/または使用する必要があります-0、ファイル全体をti slurpにますperl -0pe 's/\n+/\n/' file。
これらの回答のほとんどでは、最初に末尾の空白を削除する必要があります。二重化された改行を削除すると、すべての空白行が削除されます。(これについて考えます)。
文字通り、OPは「繰り返し空白行がある場合、ファイルからすべての空白行を削除する」ことを望んでいると解釈しました。
一般的なユーザーは、「重複する空白行のみを削除する」ことを望みます。
これを行うには、最初に末尾のホワイトペースを取り除き、cat -sでパイプします。
sed s/[[:space:]]*$// | cat -s
それでも、これはスーパーフロースの先頭または末尾の空白行を削除しません。
フィールドの区切り文字と正規表現の一部の両方を問題としてsed -e 's#\\n\\n#\\n#g' input.file > output.file使用してみてください/。