\+ 与 sed 不起作用

\+ 与 sed 不起作用

我正在使用 Bash,可以\\+使用grep但不能使用sed.

例如,如果我这样做

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

我得到这个结果:abbbbc

我尝试了 with '或 with " around s/ab\\+c/def/,得到了相同的结果。

但如果我替换\\+*,我得到:def

我必须改变>Atab_TR4682|c0_g1_i1|m.14206Atab

如果我做echo ">Atab_TR4682|c0_g1_i1|m.14206" | sed -e "s/>*\\([[:alpha:]]\\\*)_.\*/\1/g"

我得到Atab_TR4682|c0_g1可能是因为*也可以用于 0 迭代,但如果我替换*\\+它根本不起作用..

有人有解释吗?

答案1

GNUsed接受转义的+,所以如果你sed是 GNU 兼容的,你可以这样做:

$ 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(基本的正则表达式)默认。如果您sed是 POSIX 兼容但不兼容 GNU 并且您想x+充当xx*,那么您需要-E切换:

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

一些非 GNU 实现sedinclude-r作为 的同义词-E,以与旧版本的 GNU 兼容sed。语法-E是 POSIX,最近的 GNUsed都接受这两种语法。

相关内容