2012-10-22 9 views

答えて

10

あなたは、このようにそれを行うことができます。

sed -e 's/^avpgw/new text/' -e t -e 's/^av/new text/' -e t -e 's/^/new text/' file 

これは(/// S)new textのパターンを置き換えると終了(t)にジャンプします。それ以外の場合は、次のパターンを試みます。 sed commands summaryも参照してください。

あなたはまた、;でコマンドを区切ることができます。

sed 's/^avpgw/new text/; t; s/^av/new text/; t; s/^/new text/' file 

やsedコマンドファイル内のコマンドを入れる:

s/^avpgw/new text/ 
t 
s/^av/new text/ 
t 
s/^/new text/ 

をし、このようにそれを呼び出す:

sed -f commandfile file 

大文字小文字を無視する場合は、のように置換コマンドの最後にiを追加します。別の方法は、文字セットs/^[aA][vV]/new text/でそれを綴ることです。しかし、具体的にはsedではありません。一般的な正規表現を検索することができます。

+0

感謝を。それは完璧にうまくいった。大文字と小文字を区別しない方法がありますか?私はAv、AV、avなどをすべて交換する必要があることを意味します。 – user1765709

+0

@ user1765709文字セットを使用することも、修飾子を追加することもできます。私の修正された答えを見てください。 –

+0

私はcentos上にあり、これは動作していないようです。どんな考え? – Dobler

1

これは(GNU SED)あなたのために働くかもしれない:あなたの応答のための

sed -r 's/^av(pgw)?.*/replacement/;t;s/^/replacement /' file 
+0

'(pgw){、1}'は良いでしょうか? –

+0

@JanitoVaqueiroFerreiraFilho良い点。 GNU sedはオプションのメタ文字 '?'も提供しています。これは同じ0または1を意味します。しかし、文字列 'avpgwpgw'の可能性がない場合、' * 'は問題ありません。 – potong

+0

ありがとう!私はそれがどれくらい入力を信頼できるかにかかっていると思う=) –

関連する問題