从文本文件中弹出grep并编辑

时间:2014-01-28 18:44:25

标签: bash sed grep edit arithmetic-expressions

我正在对test.txt文件进行更新,该文件存储了有关故事书的一些信息

我有下面的代码用于该功能,但我意识到使用这种grep方法,我无法得到价格数量和销售的其余值,这些都没有在grep命令中提到。

我可以使用更好的命令吗?

提前感谢您的回复。 :)

echo "Title: "
read title
echo ""
echo "Author: "
read author
echo ""
echo "Number of copies sold: "
read numSold

if grep -iq "$title:$author:" test.txt
then
echo "Current Book Info :"
echo "$title, $author, $price, $quantity, $sold"
echo ""

newQuantity=`expr $quantity - $numSold`
newSold=`expr $sold + $numSold`
sed -i "s/^\($title:$author:[^:]*\):[^:]*:/\1:$newQuantity:/" BookDB.txt 
sed -i "s/^\($title:$author:.*\):.*$/\1:$newSold/" BookDB.txt 


echo "New Book Info :"
echo "$title, $author, $price, $quantity, $sold"
fi

1 个答案:

答案 0 :(得分:1)

不幸的是,test.txt的构建是未知的。 如果你能展示一个可以提供帮助的例子。

但是如果价格数量和其他工作人员在距您投注线1-2线的位置,您可以使用grep -A 2(将下一行grep 2)或-B 2(上面2行) 之后你可以从结果中删除'\ n'并打印出来:

grep -A 2 "$title:$author:*" | tr '\n' ' ' 

这将为您提供包含所有数据的一行(构建3行)。 当然它基于test.txt的构建方式。

有些事情是这样的:

> grep -A 2 "Konan Doil:Story" test.txt
Konan Doil:Story
Price - $$$$$
Quantity - XXXX, Sold - 99999

回应以下评论: 我认为它更好然后使用数组来保存输入。之后,你可以做到 使用数组你想要什么,因为值是相同的 (索引0 =作者,1 =书名......等)

 >IFS=$':'; i=0 ; for line in $(grep "Konan Doil:Good" test.txt) ; do arr[$i]=$line; i=$(($i + 1)) ; done
 >echo "${arr[0]}"
Konan Doil
>echo "${arr[1]}"
Good story
 >echo "${arr[3]}"
XXXXX
 >echo "${arr[4]}"
YYYYYY
 >echo "${arr[2]}"
$$$$$
 >