2016-08-15 110 views
-1

任何人都可以帮助我在文件内的字符串中添加零吗?Unix shell脚本在文件中查找字符串,然后通过添加字符或数字追加

例如:我有TEST.DAT并且它包含象下面这样:

1名姓甲2015042113:00:00000285000FSCRD INV 0 2名姓乙2015042220:00:00000331000SSESA INV 0

我想创建一个shell脚本来编辑fie中的一个字符串,在字符串中插入三(3)个零。

所以预期的输出将是:我大胆的增加了三个零如下。

01名姓一个2015042113:00:00 000285000FSCRD INV 0

02名姓乙2015042220:00:PM 000331000SSESA INV 0

+0

请查看[editing-help](http://stackoverflow.com/editing-help)。 – Cyrus

+0

您可以_define_您想添加零的位置吗? –

+0

假设这是制表符分隔的,并且第五个字段在开头包含一个固定长度的日期戳记,'awk -F'\ t''{$ 5 = substr($ 5,1,17)“000”substr($ 5 ,18)} 1'file'会做你所问的。 – tripleee

回答

0
sed "s/\(+[0-9]\{10\}:[0-9]\{2\}:[A-Z0-9]\{2\}\)\([A-Z0-9]\{16\}\)/\1000\2/" 

sed此命令是匹配整个第五字段,然后插入三个零。这将更加稳健(与较短的regex相比),以防止更换线路的其他部分。

如果第五个字段有规范,则可以使regex更加强大。

+0

是的,它效果更好!谢谢edi38 – Neo

0

可以使用;

awk -F : '{print $1":"$2":"substr($3,1,2)"000"substr($3,3)}' test.dat 

sed -r -e 's/^.*:../&000/' test.dat 
+0

@M Dogru - 如果FirstName有两个名字,例如'John Adam',并且该文件不是制表符分隔但空格,则$ 5将成为问题。任何想法?感谢您的答复。我认为这种模式匹配非常具有挑战性。 – Neo

+0

@Neo:我改变了FS:也许这可以帮助你; –

+0

M. Dogru - 看起来它会工作。即时违规操作。我需要更新我的shell在我solaris上的一些bin调用-r 10.非常感谢! – Neo

1

您可以使用sedregex

sed 's/\(:..:..\)/\1000/' test.dat 

它查找模式:..:..(点是任意字符,所以它寻找“结肠任意字符,任意字符结肠任何炭任何炭“),并添加3个零到它