sed在两个模式匹配之间插入字符

时间:2012-07-11 18:37:54

标签: insert sed

我正在处理这个文本文件,其中有数百行,看起来像下面的压缩版本:

# <block_uid>   # <freq> <memop> <fpop> <insn> <line> <fname> <perc>
3941319690354688    # 776547959  2.232946   0
3941427129090048    # 465293088 40  37  74 4.215079 0 
3941427110739968    # 465558912 36  35  68

我正在尝试使用sed在每行的3941319690354688# 776547959之间插入 dfpattern ,因为该文件可以手动完成大文件。 在16位数字模式之后和#之前 即它看起来像这样:

# <block_uid>   # <freq> <memop> <fpop> <insn> <line> <fname> <perc>
3941319690354688 dfpattern  # 776547959  2.232946   0
3941427129090048 dfpattern  # 465293088 40  37  74 4.215079 0
3941427110739968 dfpattern  # 465558912 36  35  68

我是sed的新手,我无法想出摆弄的命令,所以我正在寻求帮助。 能否请您简要解释一下您发布的命令,以便我可以从中学习。 谢谢!

1 个答案:

答案 0 :(得分:1)

尝试以下命令。它匹配行的开头(^),任意数量的数字后跟一个带有相同内容(\1)且附加了文字dfpattern的空格。

sed -e 's/^\([0-9]*[ ]\)/\1dfpattern /' infile

输出:

# <block_uid>   # <freq> <memop> <fpop> <insn> <line> <fname> <perc>
3941319690354688 dfpattern    # 776547959  2.232946   0
3941427129090048 dfpattern    # 465293088 40  37  74 4.215079 0 
3941427110739968 dfpattern    # 465558912 36  35  68