나는 파일의 n번째 일치하는 줄에서 일치하는 문자열을 찾기 위해 sed를 사용하려고 합니다. num
해당 줄 뒤에 mach 및 "무엇이든"이라는 표현을 사용하고 num x
.
예시 파일:
START
num 1
num 1
num 1
num n
END
sed ':a;N;$!ba; s/num .*/num x/1' example
산출:
START
num x
sed ':a;N;$!ba; s/num 1/num x/1' example
산출:
START
num x
num 1
num 1
num n
END
.*
표현식을 사용하여 그 뒤에 오는 모든 항목을 일치시키고 num
바꾸려고 하는데 num x
결과가 파일 끝을 벗어납니다. 표현식을 줄의 실제 완전한 문자열로 바꾸면 .*
원하는 결과를 얻을 수 있지만 줄의 문자 뒤에는 "무엇이든"이 있어야 합니다.
답변1
귀하의 정규식이 완전히 정확하지 않습니다.
$ sed ':a;N;$!ba; s/\nnum[^\n]*/\nnum x/4' file
답변2
sed는 한 줄에서 s/old/new를 수행하는 데 가장 적합한 도구입니다. 다른 작업에는 awk를 사용하세요.
$ awk -v n=4 '/num/ && ((++c) == n){$0="num x"} {print}' file
START
num 1
num 1
num 1
num x
END