이 sed 명령이 패턴을 캡처할 수 없는 이유는 무엇입니까?

이 sed 명령이 패턴을 캡처할 수 없는 이유는 무엇입니까?

sed문자열 주위에 괄호 쌍을 배치하기 위해 oneliner를 사용하고 싶습니다 .

내가 시도한 것은 다음과 같습니다.

echo 1 | sed -e 's/.*/(\0)/'

문자가 1패턴과 일치하도록 하고 싶습니다 .*.

그러나 출력은 단지

(0)

실제로 다음과 같은 결과를 얻고 싶습니다.

(1)

sedOSX에서 BSD를 사용하고 있습니다

답변1

&전체 패턴 일치를 교체하는 표준 방법입니다. 일부 sed구현(예: GNU 또는 busybox)은 이를 \0대안으로 지원하지만 이는 표준이거나 이식 가능하지 않습니다.

$ echo 1 | sed -e 's/.*/(&)/'
(1)

명령에 첫 번째(비어 있을 수 있음) 시퀀스가 ​​포함되어 있습니다.수치, 한 줄에 괄호 안에 최대한 많이 입력하세요. 여기에는 유효한 문자를 형성하지 않는 바이트가 포함된 줄의 전체 줄이 포함되지 않을 수 있습니다. 이 경우 다음을 찾을 수 있습니다.

sed 's/^/(/; s/$/)/'

더욱 안정적으로 작동하며 완전히 밀폐되어 있습니다.철사괄호 안에.

답변2

\1첫 번째 캡처 그룹이 참조됩니다. 현재 캡처 그룹이 없으므로 중괄호를 사용하여 일치 항목을 캡처 그룹으로 정의하고 다음을 사용하여 참조할 수 있습니다 \1.

$ echo 1 | sed 's/\(.*\)/(\1)/'
(1)

답변3

나는 다음 awk 명령을 사용하여 이 작업을 수행했습니다.

echo 1 | awk '{print "("$0")"}'

산출

(1)

관련 정보