\+는 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와의 호환성을 위한 동의어로 sedinclude가 포함됩니다 . 구문은 POSIX이며 최근 GNU는 두 구문을 모두 허용합니다.-r-Esed-Esed

관련 정보