正規表現の構文には多くのバリエーションがあります。正規表現を備えたUNIXの世界で最初のツールには、正規表現のすべての機能がありませんでした。文字セット([…]
および.
)、繰り返し(*
)および行アンカー(^
および$
)のみがありました。基本的な正規表現には、これらの演算子しかありません。Sedは昔ながらのツールであり、基本的な正規表現を使用しています。
多くのsed実装には、完全な正規表現マッチングのための拡張機能があります。文字があるので|
、それ自体を意味し、あなたが使用する必要が\|
交代のために、同様に\(
して\)
グループ化するため。POSIX標準は\|
、基本的な正規表現でサポートされることを義務付けておらず、一部のシステム(OpenBSDなど)ではサポートされていないことに注意してください。
sedの一部のバージョンでは、に切り替えるオプション持っている拡張正規表現、(…)
グループ化するために、使用された|
交替のために。GNU sed(つまり、LinuxまたはCygwin)またはBusyboxでは、-r
オプションを渡します。上のFreeBSDやOSX、渡す-E
オプションを選択します。
sedに代替がない場合は、awk
代わりに呼び出すことができます。これはPOSIXによって義務付けられていますが、このタスクについては少し冗長であり、後方参照をサポートしていません。
awk '{gsub(/foo|bar/, "narf")}' <fileName.old >fileName.new
ちなみに、GNUとBusyboxのみがsedをサポートしてファイルの置き換えをサポートしています。awkと他のバージョンのsedはサポートしていません。「カット」でファイルを変更できるかを参照してください。
Perlを使用している場合は、テキスト処理のワンライナーで、1つのツールですべての種類の方法を実行できるので便利です。sed、awk、およびその他の部分で簡単なことのほとんどは、Perlでそれほど難しくなく、単一の(複雑な場合)ツールを習得することで脱出できます。
perl -i -pe 's/foo|bar/narf/g' fileName