2013-10-29 66 views
0

我在探索sed函數(我知道我以前曾經問過類似的問題,但考慮到我在正則表達式方面非常糟糕,我需要很多幫助,但那不會「T意味着我沒有試出來我自己)將文本插入文件 - bash

什麼我這裏是低於

標識,水果名稱及數量顯示簡單的文本文件。

這次我想通過查找水果名稱分別在每個水果的數量後面添加水果的價格

fruit.txt

1,apple,50 
2,banana,40 

我試過這個命令

sed -i -r "s/(apple.*)([,0-9]*)/\1,5/" "fruit.txt" 

所以在第一個輸入

sed -i -r "s/(apple.*)([,0-9]*)/\1,5/" "fruit.txt" 

我的文本文件(clothes.txt)會變成這個樣子

1,apple,50,5 
2,banana,40 

第二輸入

sed -i -r "s/(apple.*)([,0-9]*)/\1,30/" "fruit.txt" 

我的文本文件(clothes.txt)會變成這個樣子

1,apple,50,5,30 
2,banana,40 

我怎麼讓它變成這個樣子。

預期輸出

sed命令

我的文本文件(fruit.txt)的第一輸入將變成這樣

1,apple,50,5 
2,banana,40 

上sed命令

我的文本文件的第二輸入(fruit.txt)會變成這樣:

1,apple,50,30 
2,banana,40 
+0

你有使用SED? awk將會變得如此簡單('awk'BEGIN {FS = OFS =「,」} $ 2 ==「apple」{$ 4 = 5} 1'' – Kevin

+0

我正在探索sed。之後將遷移到awk – user2928337

回答

0

而不是說[,0-9]*,確保你只匹配一個,。你可以說:

sed -i -r 's/(apple,[^,]*).*/\1,15/' filename 

這裏說(apple,[^,]*)會把apple接着是,以後內容是一個,成了一團。 .*將匹配剩下的所有內容。

這將改變

1,apple,50,5 
2,banana,40 

1,apple,50,15 
2,banana,40 
+0

非常感謝您的幫助 – user2928337

0

使用此:

sed -i -r "s/(apple,[0-9]*).*/\1,30/" "fruit.txt" 

這裏,\1是一個反向引用。它匹配第一個捕獲組。

之前,您的第一個捕獲組匹配得太多。

+0

非常感謝爲您的幫助 – user2928337