\+はsedでは機能しません

\+はsedでは機能しません

私はBashを使っていますが、うまくいきますが、うまく\\+いきgrepませんsed

たとえば、私がそうした場合

echo "abbbbc"| sed -e s/ab\\+c/def/

私は次のような結果を得ます。abbbbc

私は周りの人々'と一緒に試しましたが、同じ結果を得ました。"s/ab\\+c/def/

\\+ただし、 に変更すると、次のような*結果が得られます。def

>Atab_TR4682|c0_g1_i1|m.14206私に変更する必要がありますAtab

もし私がするならecho ">Atab_TR4682|c0_g1_i1|m.14206" | sed -e "s/>*\\([[:alpha:]]\\\*)_.\*/\1/g"

0回繰り返しても動作するのでAtab_TR4682|c0_g1そうかもしれませんが、これを交換すると全く動作しません。**\\+

誰にも説明がありますか?

ベストアンサー1

GNUはsedエスケープを許可する+ため、GNUに準拠している場合はsed次のことができます。

$ echo "abbbbc" | sed 's/ab\+c/def'
def
$ echo "abbbbc" | sed "s/ab\+c/def"
def
$ echo "abbbbc" | sed s/ab\\+c/def
def

POSIX指定(より一般的に使用可能)sedコマンドはPOSIX BRE(基本的な正規表現) デフォルトです。 POSIXと互換性がありますが、sedGNUと互換性がなくx+動作するには、次のように切り替えるxx*必要があります-E

$ echo "abbbbc" | sed -E 's/ab+c/def/'
def

一部の非GNU実装には、以前のバージョンのGNUとの互換性のための同義語としてインクルードsedが含まれています。構文は POSIX で、最近 GNU は両方の構文を受け入れます。-r-Esed-Esed

おすすめ記事