내가 뭐하는 거지
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
변수로 종료합니다(repl
0인 경우 상태로 종료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