我有一个类似的模式......有人可以帮助我弄明白吗
abc1 17898 8779
abc1 68579 7879
abc2 78794 8989
abc2 97857 9897
abc3 79850 9905
.
.
.
abc120 84889 9897
abc121 87898 7879
abc121 87898 7879
abc121 87898 7879
abc122 87898 7879
abc122 87898 7879
我想删除abc旁边的数字并给它们一个正确的序列,
应该是这样的
abc1 17898 8779
abc2 68579 7879
abc3 78794 8989
abc4 97857 9897
abc5 79850 9905
..
.
.
abc120 84889 9897
abc121 87898 7879
abc122 87898 7879
abc123 87898 7879
abc124 87898 7879
abc125 87898 7879
答案 0 :(得分:1)
awk
比sed
awk -F 'abc' '{sub(/^[0-9]+/, "", $2); print FS NR $2}' file
abc1 17898 8779
abc2 68579 7879
abc3 78794 8989
abc4 97857 9897
abc5 79850 9905
...
...
答案 1 :(得分:1)
$ awk '{sub(/[0-9]+/,NR)}1' file
abc1 17898 8779
abc2 68579 7879
abc3 78794 8989
abc4 97857 9897
abc5 79850 9905
答案 2 :(得分:0)
考虑使用支持基本算术的perl
(而不是sed
)。例如:
perl -pe 's/\B\d*\b/$./' filename
此处\b
匹配单词边界,而\B
匹配不是单词边界的空字符串,因此\B\d*\b
匹配末尾的数字组(或空字符串)该行中的第一个单词,$.
是当前行号 - Perl已帮助我们跟踪它。
可替换地,
perl -pe 's/^abc\d*/abc$./' filename
更符合您之前的尝试。
如果输入中的行与abc
模式不匹配且不应为其增加计数器,
perl -pe 's/^abc\d*/"abc" . ++$n/e' filename
允许您自己进行计数。