검색이 실패하면 sed를 사용하여 쉘 스크립트를 실행하십시오.

검색이 실패하면 sed를 사용하여 쉘 스크립트를 실행하십시오.

내가 뭐하는 거지

sed "s/test1/replacetext" testfile.txt

'test1'을 찾고 쉘 스크립트를 실행하는 데 실패하면 /q를 사용하려고 합니다. 어떻게 해야 합니까? 고마워요 네이트

답변1

GNU sed및 여러 입력 줄 사용:

sed -n '/pattern/{h;s//replacement/;};p;${g;//!q1;}' file
  • 다음을 포함하는 행에서 pattern:
    • 홀드 버퍼에 라인 추가
    • 대체 수행
  • 모든 줄을 인쇄
  • 마지막 줄( $)에 도달하면:
    • 홀드 버퍼를 얻으세요
    • 패턴 공간에 가 포함되어 있지 않으면 pattern종료 코드로 종료합니다.1
  • 빈 정규식은 //마지막으로 사용된 정규식 패턴을 사용합니다.

대안 - awk:

awk 'END{exit !repl} /pattern/{repl++; sub(/pattern/,"replacement")} 1' file
  • 줄에 가 포함되어 있으면 pattern변수가 repl증가하고 교체가 이루어집니다.
  • 마지막에는 logical not변수로 종료합니다( repl0인 경우 상태로 종료 1).

대안 - grep사전에 입력합니다. 예:

if grep -q 'pattern' file; then
    # input contains pattern - do sed replacement
    sed 's/pattern/replacement/' file
else
    : input does not contain pattern - execute shell script
fi

관련 정보