GNU/Linux >> Linux の 問題 >  >> Linux

sed を使用して二重の空行のみを削除するには?

sed にコメントしました わからないコマンド:

sed '
    ## In first line: append second line with a newline character between them.
    1N;
    ## Do the same with third line.
    N;
    ## When found three consecutive blank lines, delete them. 
    ## Here there are two newlines but you have to count one more deleted with last "D" command.
    /^\n\n$/d;
    ## The combo "P+D+N" simulates a FIFO, "P+D" prints and deletes from one side while "N" appends
    ## a line from the other side.
    P;
    D
'

1N を削除 「スタック」には 2 行しか必要なく、2 番目の N で十分だからです。 、および /^\n\n$/d; を変更します /^\n$/d; へ 2 つの連続する空白行をすべて削除します。

テスト:

infile の内容 :

1


2
3

4



5

6


7

sed を実行します コマンド:

sed '
    N;
    /^\n$/d;
    P;
    D
' infile

1
2
3

4

5

6
7

これは awk でより簡単になります :

awk -v RS='\n\n\n' 1

これは cat でより簡単になります :

cat -s

sed '/^$/{N;/^\n$/d;}'

ファイル内の連続する 2 行の空白行のみを削除します。この表現はファイルでのみ使用でき、完全に理解できるのはあなただけです。空白行が来ると、中括弧に入ります。

通常、sed は 1 行を読み取ります。 N 2 行目をパターン スペースに追加します。その行が空の行の場合。両方の行は改行で区切られています。

/^\n$/ このパターンは、その時点で d のみに一致します 動作します。そうでなければ d うまくいかない。 d パターンスペース全体のコンテンツを削除してから、次のサイクルを開始するために使用されます。


Linux
  1. Sedテキストエディタの使い方を学ぶ

  2. Awkを使用して5列を含む行のみを印刷するにはどうすればよいですか?

  3. 特定の文字列と次の行を含む行を削除しますか?

  1. Linuxsedコマンドの使用方法

  2. sed で \r 文字を削除する方法

  3. csv の二重引用符を削除する方法

  1. Sedを使用して複数行の文字列を置き換える方法は?

  2. Linuxの「cat」コマンドを使用して、特定の行のみを番号で表示するにはどうすればよいですか。

  3. 最初の一致でのみ挿入する sed