假设我有一个这样的文件。
Keyword "name"
aaa bbb
ccc ddd
Keyword "another name"
eee fff
ggg
hhh iii
等等。
我想更改文件中的关键字行,使计数器从给定数字开始。例如,如果我想对从 5 开始的关键字行进行编号,则关键字行将如下所示
Keyword "5 - name"
Keyword "6 - another name"
等等。文件中的所有其他行均未更改。
有没有办法做到这一点谢谢。
答案1
如果您有 GNU sed,则可以使用非标准R
命令从预先生成的序列中读取和插入索引,并再次调用 sed 来重新排列结果:
printf '%d\n' {5..100} | sed '/^Keyword/R /dev/stdin' file |
sed '/^Keyword/{N; s/Keyword "\([^"]*\)"\n\(.*\)/Keyword "\2 - \1"/}'
不过,我建议使用perl
orawk
来代替此任务 - 例如
awk -v k=5 '/^Keyword/ {sub(/^Keyword \"/, sprintf("Keyword \"%d - ", k++))} 1' file
答案2
如果您不依赖sed
,则很容易做到perl
:
$ perl -pe 'BEGIN{$k=4};s/Keyword "/$& . ++$k . " - "/e' file
Keyword "5 - name"
aaa bbb
ccc ddd
Keyword "6 - another name"
eee fff
ggg
hhh iii