2016-08-15 111 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個零到它