私は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と互換性がありますが、sed
GNUと互換性がなくx+
動作するには、次のように切り替えるxx*
必要があります-E
。
$ echo "abbbbc" | sed -E 's/ab+c/def/'
def
一部の非GNU実装には、以前のバージョンのGNUとの互換性のための同義語としてインクルードsed
が含まれています。構文は POSIX で、最近 GNU は両方の構文を受け入れます。-r
-E
sed
-E
sed