2012-07-11 85 views
2

我的工作有数百行,看起来像下面的浓缩版这个文本文件: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插入dfpattern在每行上的3941319690354688# 776547959之间,因为该文件大到需要手动完成。一个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

请尝试以下命令。它从行的开头匹配(^),任意数字后面跟着一个空格,其内容相同(\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 
+0

岂不是足够用,以取代第一空间'dfpattern' ? 's// dfpattern /' – tripleee 2012-07-11 20:50:26

+0

@tripleee:是的。它也可以工作,但考虑到跳过标题,比如'sed -e'2,$ s// dfpattern /'infile' – Birei 2012-07-11 20:53:29

+0

由于某些原因,它不适用于我:它给了我同样的输出。但是sed -e's/\([0-9] * [] \)/ \ 1dfpattern/g'testing.txt - 改变了输出,但是在错误的地方,因为我没有指定^前面的行字符。 – 2012-07-11 21:16:38