2013-01-20 13 views
2

我有一個文本文件。更新文本文件中的字段,shell bash

信息的文本文件是

Book1:Author1:10.50:50:5 
Book2:Author2:4.50:30:10 

第一個是本書的名字,第二個是作者的名字,第三是價格,第四是數量和第五是銷售數量。

我試圖更新的價格和它的作品罰款:

read -p $'New Price: ' newPrice 
sed "s/${Title}:${Author}:[^:]\+/${Title}:${Author}:${newPrice}/g" BookDB.txt > tempBook.txt 
mv -f tempBook.txt BookDB.txt 
echo "Book price updated!" 

當我退出程序,並添加代碼使用更新的數量:

read -p $'New Quantity: ' newQty 
sed "s/${Title}:${Author}:${Price}:[^:]\+/${Title}:${Author}:${Price}:${newQty}/g" BookDB.txt > tempBook.txt 
mv -f tempBook.txt BookDB.txt 
echo "Book quantity updated!" 

的量不能更新只是因爲我有點失去了價格信息。如果我立即在存儲價格的地方向程序中添加新書,我可以編輯數量,但對於其他書籍,不可能編輯可用數量。

有人可以幫忙嗎?我想知道我是否可以提取/存儲這本書價格的價值。

回答

1

對於更新量,您可以使用:

read -p $'New Quantity: ' newQty 
sed -re "s/${Title}:${Author}:([^:]+):[^:]+/${Title}:${Author}:\1:${newQty}/g" BookDB.txt > tempBook.txt 
mv -f tempBook.txt BookDB.txt 
echo "Book quantity updated!" 
+0

我是新來的Bash shell腳本。請問([^:] +)做了什麼?還有[^:],\ 1是否取(([^:] +)的值? –

+0

1)'([^:] +)'是正則表達式,它匹配包含多於一個字符的字符串,而所有這些字符不是'':''。 2)是的。 –

+0

1.5)'[^:]'是正則表達式,匹配除':'之外的任何字符。 –