awk之修改匹配的第N个内容

file:
aaa
88
bbb
88
88
ccc
88
ddd
eee
[code]
#修改匹配88的第一个
awk '/88/&&!i++{$0="---"}1' file
awk '/88/{i++} /88/&&(i==1){$0="---"}1' file
利用!i++只取第1个
awk '/88/&&!a[$1]++{$0="---"}1' file
#替换第三个
awk '/88/{i++} /88/&&(i==3){$0="---"}1' file
awk '/88/&&(++i=3){$0="---"}1' file
#替换第N个
awk '/88/{i++} /88/&&(i==N){$0="---"}1' file
awk '/88/&&(++i=n){$0="---"}1' file
#替换最后一个
awk 'BEGIN{while(getline<"file"){j++;if(/88/)i=j}}NR==i{$0="---"}1' file
BEGIN{while (getline < "file")} 读取文件全部内容
j++ 行计数
if(/88/)i=j 将匹配的行号用i记录下来
因为是逐行处理,只能保存最后的记录
NR==i 执行打印
sed ':a;/\n88/!{$s/88/--/;N;ba};P;D' file
sed ':a;N;$!ba;s/\(.*\)88/\1--/' file

你可能感兴趣的:(Awk)