テキストファイルデータベース形式から、
顧客:HDB:価格:左:利用可能
テッド:rm4:34:197:101
bashシェルスクリプト、
read -p $'Price: ' Price2
sed -i "s/$Customer:$HDB:$Price/$Customer:$HDB:$Price2/g" CustomerDB.txt
43 を入力すると、データベースが返されます
テッド:rm4:4334:197:101
34 ではなく 43 に置き換えるにはどうすればよいですか?
$Price空いているようです。古い価格が含まれていますか? 古い値に関係なくすべての価格を置き換えたい場合は、次を使用できます
sed -i "s/$Customer:$HDB:[0-9]*/$Customer:$HDB:$Price2/g" CustomerDB.txt
個人的には、行を個別のフィールドに自動的に解析するため、sed ではなく awk を使用します。
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 と比較します。それらが同じである場合、3 番目のフィールドが価格 var と等しくなるように設定されます。
次に、OFS var の値で区切られたすべてのフィールドを出力します (デフォルトではスペースですが、: に上書きしました)。