2011-09-17 3 views
2

基本的に共通のフォーマットを含む行はいくつかありますが、最後に異なる表現があります。コマンドはそれらのすべてに対して機能しますが、可能なすべてのパターンに一致させたいので、スクリプトでは1行しか必要としません。例として、私はスクリプトを以下のように動作させる方法を知っています。単一のコマンドに複数の可能なパターンを指定する

/pattern1/ s/asdf/ghjk/g 
/pattern2/ s/asdf/ghjk/g 
/pattern3/ s/asdf/ghjk/g 

アイデアはありますか?

答えて

4

あなたのパターンはあなたの例のように、本当にとして類似している場合のパターンは非常に類似していないと、あなたのsedコマンドが拡張正規表現をサポートしている場合、あなたは

sed -e '/pattern[1-3]/ s/asdf/ghjk/g' 

を使用することができ、あなたが使用することができます

sed -E -e '/(pattern1|pattern2|pattern3)/ s/asdf/ghjk/g' 
# ^^ use extended regular expressions 
#  for GNU sed, use -r or escape (, |, and) with \ 

あなたsedコマンドは、拡張正規表現をサポートしていない場合は、awkまたはperlにオンにする必要がある場合があります:

perl -ple '/(pattern1|pattern2|pattern3)/ && s/asdf/ghjk/g' 
+0

これは動作しますが、-Eスイッチなしでこれを行う方法はありますか? – sj755

+0

あなたのsedは "-r"をサポートしていますか? – Kent

+1

GNU 'sed'を使用している場合、拡張正規表現の特殊文字をバックスラッシュでエスケープする場合、' -E'オプションは必要ありません: 'gnused -e '/ \(pattern1 \ | pattern2 \ | pattern3 \ )/ s/asdf/ghjk/g'' – ajk

関連する問題