그래서 나는 다음과 같은 선언을 합니다.
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