如何使用sed编号匹配模式的出现次数。例如:我有一个文件,其数据格式为:
line1
line2
line3
********
line4
line5
********
line6
line7
line8
line9
*******
line10
我需要以下格式的输出:
line1
line2
line3
1*******
line4
line5
2*******
line6
line7
line8
line9
3******
line10
因此,基本要求是将/ ^ \ * /的第一个出现次数替换为1,将第二个出现次数替换为2,将第三个出现次数替换为3,依此类推。
使用正确的工具完成正确的工作。这是为awk量身定制的工作:
awk '$1 ~ /\*\*\*\*/{print ++a $0; next} {print}' file
line1
line2
line3
1********
line4
line5
2********
line6
line7
line8
line9
3*******
line10
否则,纯BASH解决方案:
while read l; do
[[ $l == *'****'* ]] && l=$((++x))"$l"
echo "$l"
done < file
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句