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

tom*_*tom 4 sed text-processing

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

Keyword "name"
aaa bbb
ccc ddd

Keyword "another name"
eee fff
ggg
hhh iii
Run Code Online (Sandbox Code Playgroud)

等等。

我想将文件中的关键字行更改为从给定数字开始的计数器。例如,如果我想从 5 开始对关键字行进行编号,则关键字行看起来像

Keyword "5 - name"
Keyword "6 - another name"
Run Code Online (Sandbox Code Playgroud)

等等。文件中的所有其他行都不会更改。

有没有办法做到这一点谢谢。

ste*_*ver 7

如果您有 GNU sed,则可以使用非标准R命令从预先生成的序列中读取和插入索引,并再次调用 sed 来重新排列结果:

printf '%d\n' {5..100} | sed '/^Keyword/R /dev/stdin' file | 
    sed '/^Keyword/{N; s/Keyword "\([^"]*\)"\n\(.*\)/Keyword "\2 - \1"/}'
Run Code Online (Sandbox Code Playgroud)

但是,我建议使用perlawk代替此任务 - 例如

awk -v k=5 '/^Keyword/ {sub(/^Keyword \"/, sprintf("Keyword \"%d - ", k++))} 1' file
Run Code Online (Sandbox Code Playgroud)


ter*_*don 5

如果您没有绑定到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
Run Code Online (Sandbox Code Playgroud)