Gnu Sed(在 Gnu/Linux 上)查找匹配项 +“任何内容”并替换它

Gnu Sed(在 Gnu/Linux 上)查找匹配项 +“任何内容”并替换它

我正在尝试使用 sed 在文件中第 n 个匹配的行上查找匹配字符串。我想使用表达式来 machnum和该行之后的“任何内容”,并将其替换为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

相关内容