2016-12-16 15 views
2

sedで正規表現のキャプチャグループと行を置き換えることは可能ですか?sed行をキャプチャグループに置き換えます

私はこの正規表現を持っていますが、これは修正されていることに注意してください。私は変更できません。

simple sample(.*)

これは私が欲しいものです:へ

This is just a simple sample line with some text 

変更:今、出力

sed '/simple sample \(.*\)/c \1' 

line with some text 

私はこのようなものが必要:

1 

変更ライン機能でsedのキャプチャグループを使用できるかどうかは誰にも分かりますか?

+1

ほとんどの場合、 'sed 's/find/replace /'構文: 'sed' s/\(。* \)シンプルサンプル\/\ 1 \ 2/'ファイル'。なぜあなたは '\ c'を途中で使用しているのか分かりません。 – fedorqui

+0

はい、私はそれがこの例のために可能であることを知っています、ありがとう。しかし、問題は、行を置換する必要があるということです。行と一致するときに置換するだけの値を使用できるように正規表現を処理する必要があるからです。つまり私は正規表現 '単純なサンプル'を持っているかもしれません。私があなたの方法を使っているとき、私は 'これはちょうどあるテキストの素晴らしい行です。正しい正規表現が(この場合は '。*)簡単なサンプル(。*)'に置かれたときにこれが解決できることは分かっていますが、これは私が持っている量のために可能ではありません。/c'。 – zjeraar

+1

ええ、あなたは正しい、私はそれを変更しました – zjeraar

答えて

2

このようにしますか?

echo "This is just a simple sample line with some text" | \ 
    sed 's/simple sample \(.*\)/\n\1/;s/.*\n//' 

発想は単純です:改行によって先行キャプチャグループで正規表現全体のマッチを交換してください。その後、最初の改行までのすべてのものを何も置き換えないで置き換えます。もちろん、改行以外のマーカーを使うこともできます。

+0

うん:-)。最後のセクションで何が起こっているのか少し説明できますか? – zjeraar

+0

ああ、私は理解しています。すばらしい、知りませんでした。これを見つける人のために、前の部分。私たちが必要としているものを新しいラインとその後ろに置きます。最初の行を削除します。 – zjeraar

0

レスキューへのPerl!

perl -ne 'if (/(.*)simple sample (.*) with (.*)/) { 
      print "$1$2\n"; 
      } else { print }' 
+0

うん、うまく動作しますが、私は本当に不可能な場合を除いて、ここでsedする必要があります。 – zjeraar

関連する問題