sed - 패턴을 찾아서 바꾸지만 특정 숫자 시퀀스는 제외합니다.

sed - 패턴을 찾아서 바꾸지만 특정 숫자 시퀀스는 제외합니다.

그래서 나는 다음과 같은 선언을 합니다.

echo "1234 The few, 7777 the brave." | sed 's/[0-9]\{4\}/(&)/g'

어느 출력

(1234) The few, (7777) the brave.

하지만 패턴 매칭에서 7777을 제외하고 싶습니다.

(1234) The few, 7777 the brave.

질문: 7777 패턴 일치를 제외하는 방법은 무엇입니까?

답변1

sed에는 7777을 훌륭하게 건너뛸 수 있는 예측 표현식이 없습니다. 그러나 모든 7777 일치 항목을 입력 어디에도 나타나지 않을 것으로 확신하는 일부 문자열로 "이동"하면 서투르게 이 작업을 수행할 수 있습니다.

예를 들어 #7#7#7#7#이 입력에 표시되지 않는다는 것을 알고 있는 경우 다음을 사용할 수 있습니다.

echo "1234 The few, 7777 the brave." | \
sed -e 's/7777/#7#7#7#7#/g' -e 's/[0-9]\{4\}/(&)/g' -e 's/#7#7#7#7#/7777/g'

얻기 위해

(1234) The few, 7777 the brave.

답변2

또는:

echo "1234 The few, 7777 the brave." | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
(1234) The few, 7777 the brave.

echo "A 1717 B 7777 C 7676 D" | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
A (1717) B 7777 C (7676) D

echo "7777 foo 1234 bar" | sed -e 's/\([0-9]\{4\}\)/(\1)/g' -e 's/(\(7\{4\}\))/\1/g'
7777 foo (1234) bar

관련 정보