使用 Sed 为关键字添加计数器

使用 Sed 为关键字添加计数器

假设我有一个这样的文件。

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"/}'

不过,我建议使用perlorawk来代替此任务 - 例如

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

相关内容