2012-03-16 8 views
0

シェルスクリプトで空白の1を含む複数の行を検索する私は複数行にまたがると、空白行に置き換えるパターンを見つけるために、次のコマンドを使用しています

sed -n '1h; 1!H; ${ g; s/<Pattern1>\n<pattern2> //g p }' <file-name>

例えば、見つけます次のエントリが含まれているファイルtest.txtの内のパターン ジョン・ドウ

Mary 

John 
Doe 
Simon 
Henry 

私はコマンドを使用します。

sed -n '1h; 1!H; ${ g; s/John\nDoe //g p }' test.txt 

しかし、私は、すなわち、^ $文字を使用して、空白として第2のラインを持つパターンに対してこのコマンドを動作させるように見えることはできません。

このように、複数行のパターンを検索すると、メアリーの後に空白行が続き、一致するパターンは表示されません。したがって、次のコマンドは検索を行わず、したがって置換を行いません。

sed -n '1h; 1!H; ${ g; s/Mary\n^$ //g p }' test.txt 

私は、ファイル内に複数のこのようなコマンドを保存し、それらを実行した場合

EDIT


はしかし、その後、最初の検索は罰金を通過、しかし、その後のパターンを探しに、私はsedのブランクからの出力を取得します。

私は、sed -n '1h; 1 H; $ {g; s/\ n // g p} 'sed -n' 1h; 1 H; $ {g; s/\ n // gp} 'をファイル内に挿入し、evalキーワードを使用してこのファイルの各行を実行すると、最初のsedが最初の複数行のパターン、つまりpattern1とそれに続くpattern2を置き換えます。ファイルにこれらのパターンが含まれているにもかかわらず空白の出力。すべての手がかりは?

答えて

1

これは、入力ファイルで私の作品:

sed -n '1h; 1!H; ${ g; s/Mary\n\n/\n/g p }' 

説明:

Mary\n\n    # Mary with two consecutive newlines, the first one is automatically added by 
         # the 'H' command, and the next one means the empty line, asumming it has no 
         # spaces. 
\n      # Substitute it with a blank line. 
+0

これは動作します。ありがとう。 – Rishabh

+0

しかし、このようなコマンドをファイルに複数格納して実行すると、最初の検索はうまくいきますが、後続のパターンの検索ではsedから空白の出力が得られます。 それは私が保管するなら、sed -n '1h; 1 H; $ {g; s/\ n // g p} 'sed -n' 1h; 1!H; $ {g; s/\ n // gp} 'をファイル内に挿入し、evalキーワードを使用してこのファイルの各行を実行すると、最初のsedが最初の複数行のパターン、つまりpattern1とそれに続くpattern2を置き換えます。ファイルにこれらのパターンが含まれているにもかかわらず空白の出力。すべての手がかりは? – Rishabh

2

これはあなたのために働くかもしれない:

sed '$!N;s/John\nDoe//;P;D' file 
Mary 


Simon 
Henry 
sed '$!N;s/Mary\n$//;P;D' file 

John 
Doe 
Simon 
Henry 

N.B. ^は、文字列の先頭で、で始まりません(GNU sedではmフラグを使用しない限り)。同様に$は文字列の最後を意味します。

EDIT:

上記の2つのコマンドは組み合わせることができます

sed '$!N;s/John\nDoe//;s/Mary\n$//;P;D' file 


Simon 
Henry 
+0

これは動作します。マイティありがとう! – Rishabh

+0

しかし、そのようなコマンドをファイルに複数格納して実行すると、最初の検索はうまくいきますが、その後のパターンの検索ではsedから空白の出力が得られます。 それは私が保管するなら、sed -n '1h; 1 H; $ {g; s/\ n // g p} 'sed -n' 1h; 1 H; $ {g; s/\ n // gp} 'をファイル内に挿入し、evalキーワードを使用してこのファイルの各行を実行すると、最初のsedが最初の複数行のパターン、つまりpattern1とそれに続くpattern2を置き換えます。ファイルにこれらのパターンが含まれているにもかかわらず空白の出力。すべての手がかりは? – Rishabh

+0

複数の代替コマンドを組み合わせる方法については、EDITを参照してください。 – potong

関連する問題