Gnu Sed(Gnu/Linux)는 match + "anything"을 찾아 교체합니다.

Gnu Sed(Gnu/Linux)는 match + "anything"을 찾아 교체합니다.

나는 파일의 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

관련 정보