从文本文件数据库格式,
客户:组屋:价格:左:有货
泰德:rm4:34:197:101
bash shell 脚本,
read -p $'Price: ' Price2
sed -i "s/$Customer:$HDB:$Price/$Customer:$HDB:$Price2/g" CustomerDB.txt
当我输入 43 时,数据库返回
泰德:rm4:4334:197:101
我如何将其替换为 43 而不是 34?
好像$Price
是空的。你确定它包含旧价格吗?如果您想替换所有价格而不考虑旧值,您可以使用
sed -i "s/$Customer:$HDB:[0-9]*/$Customer:$HDB:$Price2/g" CustomerDB.txt
就我个人而言,我会使用 awk 而不是 sed,因为它会自动将行解析为单独的字段。
read -p "customer: " cust
read -p "new price: " price2
awk -F : -v OFS=: -v cust=$cust -v price=$price2 '{ if($1==cust){ $3=price } ; print}' file
那么发生了什么?
那么 -F : 设置 : 作为字段分隔符 -v var=val 设置一些变量以在 awk 脚本中使用,在这种情况下,OFS 以及 cust 和 price 变量
实际的 awk 脚本将第一个字段 ($1) 与 cust var 进行比较。如果它们相同,则将第三个字段设置为等于价格变量。
然后我们打印出由 OFS var 的值分隔的所有字段(默认情况下为空格,但我们已覆盖为 :'s)