여러 대체 규칙이 있지만 첫 번째 적용 가능한 규칙만 사용하고 싶습니다. sed
기본적으로 출력은 나머지 규칙을 사용하여 계속 처리됩니다. 첫 번째 교체 후 중단하는 방법은 무엇입니까? 그냥 사용해도 되나요 sed
? 매뉴얼에서 옵션을 찾을 수 없습니다.
실제 출력
$ sed "s/something/else/; s/one/two/; s/two/three/;" <<<"one"
three
조치 필요
$ sed "s/something/else/; s/one/two/; s/two/three/;" <<<"one"
two
답변1
t
대체가 이루어지면 각 명령 다음에 다음을 사용하여 s
스크립트 끝으로 분기합니다.
sed -e 's/something/else/;t' \
-e 's/one/two/;t' \
-e 's/two/three/;t' <<<"one"
여기서 t
마지막으로 교체한 명령은 필요하지 않지만, 이 코드가 자동으로 생성된다면 s
마지막 접미사라도 모든 접미사로 가지고 있어도 문제가 없다.
답변2
다른 명령에서 "t" 분기와 함께 sed를 사용하는 것이 완벽한 답입니다.
이것은 단지 제안일 뿐입니다. 교체 후 내부에서 여러 작업을 수행하려는 경우 다음을 사용할 수 있습니다.앗:
awk ' { if (gsub("something","else",$0) || gsub("one","two",$0) || gsub("two","three",$0) ){ print $0;exit}; }' <<<"one"
답변3
이는 순차적으로 평가되므로 원이 없고 쉽게 수행할 수 있는 경우 다음을 사용할 수 있습니다.
s/two/three/; s/one/two/; s/something/else/
원이 있거나 목록이 다른 데이터에서 생성된 경우 마커를 사용할 수 있습니다.
s/@/@@/g
s/one/t@wo/
s/two/t@hree/
s/something/e@lse/
s/@\(.\)/\1/g