정규식 패턴을 사용하여 sed의 대체 항목을 변수로 사용하는 방법은 무엇입니까?

정규식 패턴을 사용하여 sed의 대체 항목을 변수로 사용하는 방법은 무엇입니까?

(예를 들어) stdin으로 다음이 있다고 가정해 보겠습니다.

Life is temporary

나는 sed가 이것을 다음으로 대체하기를 원합니다.

Life is permanent

어딘가에 명령을 사용하여

sed 's/Life<%XY=.*>temporary/Life%XYpermanent'

물론 위의 내용은 유효한 명령이 아니며 예시를 위한 것임을 알고 있습니다. 일치하는 모든 항목을 변수에 저장하고 .*교체 문자열에서 해당 변수를 호출하고 싶습니다.

답변1

sed 's/Life\(.*\)temporary/Life\1permanent/'

여기서는 \1패턴의 첫 번째 괄호 쌍을 나타냅니다. 이 경우 유일한 쌍이지만 일반적으로 더 많은 쌍을 가질 수 있으며 등을 최대 까지 사용할 \2\3있습니다 \9.

괄호는 이스케이프됩니다. 그렇지 않으면 \문자 그대로 받아들여지고 \1작동하지 않을 것입니다. then을 사용하면 sed -E반전됩니다. (특별하고 \(리터럴을 나타냅니다 ((일반적으로 유일한 차이점은 아닙니다 -E).

sed -E 's/Life(.*)temporary/Life\1permanent/'

이러한 변화로 인해 우리 sed코드는 사람이 좀 더 읽기 쉽게 되었습니다.

관련 정보