![sed - 패턴을 찾아서 바꾸지만 특정 숫자 시퀀스는 제외합니다.](https://linux55.com/image/171284/sed%20-%20%ED%8C%A8%ED%84%B4%EC%9D%84%20%EC%B0%BE%EC%95%84%EC%84%9C%20%EB%B0%94%EA%BE%B8%EC%A7%80%EB%A7%8C%20%ED%8A%B9%EC%A0%95%20%EC%88%AB%EC%9E%90%20%EC%8B%9C%ED%80%80%EC%8A%A4%EB%8A%94%20%EC%A0%9C%EC%99%B8%ED%95%A9%EB%8B%88%EB%8B%A4..png)
그래서 나는 다음과 같은 선언을 합니다.
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