このsed表現にはどのような問題がありますか?

このsed表現にはどのような問題がありますか?
$ echo "104_Fri" | sed 's/^\([0-9]+\)_\([A-Za-z]+\)$/\1;\2/'
104_Fri

開始番号と終了文字をそれぞれグループに一致させたい。次に、最初のグループ、セミコロン、2番目のグループを出力したいと思います。

私はこの式が次を生成したいと思います:

104;Fri

なぜこれがうまくいかないのですか?

ベストアンサー1

バックスラッシュ+:

$ echo "104_Fri" | sed 's/^\([0-9]\+\)_\([A-Za-z]\+\)$/\1;\2/'
104;Fri

気づく+標準の基本正規表現メタ文字ではありません。したがって、バックスラッシュを使用しても移植可能な動作はありませんsed

有効またはsed -r有効sed -Eにする必要があります。拡張正規表現代わりに、これらの文字をバックスラッシュする必要はありません。これらのオプションも非標準ですが、サポートされていないと、不明な欠陥ではなく、少なくともエラーが発生します。このオプションは以下をサポートします。牛に似た一種の栄養sedそしてすべての主要なBSD派生物(FreeBSDオープンBSDネットワークBSDオペレーティングシステム)、しかし、多くの商用Unixバージョンではそうではありません。

移植性に優れた拡張正規表現が必要な場合は、以下を使用してください。awk、常に使用してください

おすすめ記事