0

テキストファイルデータベース形式から、

顧客: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 に置き換えるにはどうすればよいですか?

4

2 に答える 2

0

$Price空いているようです。古い価格が含まれていますか? 古い値に関係なくすべての価格を置き換えたい場合は、次を使用できます

sed -i "s/$Customer:$HDB:[0-9]*/$Customer:$HDB:$Price2/g" CustomerDB.txt
于 2013-01-18T11:34:47.093 に答える
0

個人的には、行を個別のフィールドに自動的に解析するため、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 の値で区切られたすべてのフィールドを出力します (デフォルトではスペースですが、: に上書きしました)。

ここに良い awk イントロがあります

于 2013-01-18T11:41:49.403 に答える