我有一个名为BookDB.txt的txt文件,其中包含以下数据。
Little Prince:The Prince:15.00:188:9
Lord of The Ring:Johnny Dept:56.80:100:38
Catch Me If You Can:Mary Ann:23.60:6:2
Happy Day:Mary Ann:12.99:197:101
它用分隔符分隔,使其按标题,作者,价格,QtyLeft和QtySold分组。
这是我的问题,我需要提示输入标题和作者,然后它将检查BookDB.txt以查找该书的行并编辑其价格。我该怎么做呢?这就是我到目前为止所做的事情
read -p $'Title: ' updatetitle
read -p $'Author: ' updateauthor
#check if book exist in BookDB.txt
if grep -Fq "${updatetitle}:${updateauthor}" BookDB.txt
then
read -p $'NewPrice: ' newPrice
#This is the part i'm stuck
else
echo "Book does not exist"
fi
答案 0 :(得分:3)
这是另一种解决方案:
if grep -Fq "${updatetitle}:${updateauthor}" BookDB.txt
then
read -p $'NewPrice: ' newPrice
sed -i -e "s/${updatetitle}:${updateauthor}:[^:]\+/${updatetitle}:${updateauthor}:${newPrice}/g" BookDB.txt
else
echo "Book does not exist"
fi
答案 1 :(得分:2)
一种方式:
if grep -Fq "${updatetitle}:${updateauthor}" BookDB.txt
then
read -p $'NewPrice: ' newPrice
awk -F: -v title="$updatetitle" -v auth="$updateauthor" -v price=$newPrice '$1==title && $2==auth{$3=price;}1' OFS=":" BookDB.txt >> BookDB.txt_tmp
mv BookDB.txt_tmp BookDB.txt
else
echo "Book does not exist"
fi
使用awk
,更新第3个字段,并将内容复制到临时文件中,然后将其重命名为原始文件。
使用awk
选项将参数updatetitle,updateauthor和newPrice传递给-v
。将针对updatetitle检查第一个($1
)字段,并针对updateauthor检查第二个字段($2
),如果它们都匹配,则第三个字段使用newPrice($3=price
)进行更新。 1
最后是打印每一行。
使用sed(GNU) :(代替上面的awk和mv)
sed -i "s/\(${updatetitle}:${updateauthor}:\)\([^:]*\)\(.*\)/\1${newPrice}\3/" file