저는 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
include가 포함됩니다 . 구문은 POSIX이며 최근 GNU는 두 구문을 모두 허용합니다.-r
-E
sed
-E
sed