2012-02-13 17 views
2

sedを使用して、パターンで始まりセミコロン(;)で終わるコード(段落)の一部を削除したいと考えています。sedを使用してコードパターンを削除しますか?

は今、私は私ではない区切り文字としてではなく、パターンとしてセミコロンを使用する方法が混乱している改行で

sed -e '/./{H;$!d;}' -e 'x;/Pattern/!d' 

を分離段落を削除するには、例に出くわしました。おかげさまで

+0

sed '/^\s*LOG\s*(.*;\s*$/ d ; /^\s*LOG/,/;\s*$/ d' infile 

説明:

は、次のsedのコマンドを試してみてください結果を示します。 – potong

+0

はい、入力してください、http://pastebin.com/hHXJjSS – Harsh

答えて

2

その他のオプションは、アドレス範囲のGNU拡張を使用することです。

次の例では、パターンで始まる行のすべてをセミコロンで終わるまで削除します。過酷なのコメントを

sed '/pattern/,/;$/ d' infile 

EDIT:例えば、データやEXPをご提示ください

/^\s*LOG\s*(.*;\s*$/ d   # Delete line if begins with 'LOG' and ends with semicolon. 
/^\s*LOG/,/;\s*$/ d    # Delete range of lines between one that begins with LOG and 
            # other that ends with semicolon. 
+0

あなたが表示するコードは、アドレス範囲処理のGNU拡張に依存していません。これは20年以上前のオリジナルのsedで動作します;-)すべてに幸運! – shellter

+0

入力が1行である場合にのみ機能します。私が間違っているなら、私を修正してください。したがって、バッファを保持する必要はありません。サンプルhttp://pastebin.com/hHXJjtiS – Harsh

+0

@shellter:ありがとうございました。 – Birei

1

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

cat <<! >file 
> a 
> b 
> ; 
> x 
> y 
> ; 
> ! 
sed '/^[^;]*$/{H;$!d};x;s/;//;/x/!d' file 

x 
y 

説明:任意の行については

  • インクルードは、単一の;ではありません、それ/^[^;]*$/
  • ホールドスペースに上記の行を追加します( HS)を削除し、パターンスペース(PS)を削除し、ファイル内の最後の行でない限り次の繰り返しを開始します。 HSへ
    • スワップx
    • は、パターンの最初の;s/;//
    • 検索(x)を削除し、見つからない場合は削除します。{H;$!d}
    • ラインが/^$/空またはファイルの最後の行である場合PS /x/!d

NBこれにより、任意のパターン/x/が検索され、開始パターンの使用/^x/が見つかります。

EDIT:

あなたのデータと予想される結果を見た後、これはあなたのために働く可能性があります

sed '/^\s*LOG(.*);/d;/^\s*LOG(/,/);/d' file 
+0

ありがとうございます。それは私の疑いを解決する。 – Harsh

関連する問題