Shell 如何使用sed在文本文件中找到相应的位置并更新它
我想更新数量,在这种情况下是197的值,但我似乎无法用我的程序更新该值。请帮助我,因为我刚刚开始学习shell编程。谢谢Shell 如何使用sed在文本文件中找到相应的位置并更新它,shell,replace,sed,Shell,Replace,Sed,我想更新数量,在这种情况下是197的值,但我似乎无法用我的程序更新该值。请帮助我,因为我刚刚开始学习shell编程。谢谢 Book name:author:price:Qty:Qty Sold ================================== harry potter:james:12.99:197:101 =============================== 第一个字符类后缺少一个星号。不要忘了扩展组。第一个字符类后缺少一个星号。不要忘了扩展组。重构为使用gre
Book name:author:price:Qty:Qty Sold
==================================
harry potter:james:12.99:197:101
===============================
第一个字符类后缺少一个星号。不要忘了扩展组。第一个字符类后缺少一个星号。不要忘了扩展组。重构为使用
grep-q
;修正if
习惯用法;将搜索锚定到行的开头;使用read-p
代替单独的echo
;在价格表中记录价格,以免丢失;在正则表达式中添加缺少的repeat;并在新数量值后加回分隔符冒号;另外,添加一个else
子句,使函数不会无声地失败
function update_qty_available
{
grep -c "$title:$author" BookDB.txt > /dev/null # Look for a line with matching values
if [ $? == 0 ];
then # If found then offer to change Qty
echo "Update Qty to what?"
read newQty
sed -i "s/\($title:$author\):[^:]:[^:]*:/\1:$newQty/" BookDB.txt
echo "Book's Qty has been updated successfully!"
fi
重构为使用
grep-q
;修正if
习惯用法;将搜索锚定到行的开头;使用read-p
代替单独的echo
;在价格表中记录价格,以免丢失;在正则表达式中添加缺少的repeat;并在新数量值后加回分隔符冒号;另外,添加一个else
子句,使函数不会无声地失败
function update_qty_available
{
grep -c "$title:$author" BookDB.txt > /dev/null # Look for a line with matching values
if [ $? == 0 ];
then # If found then offer to change Qty
echo "Update Qty to what?"
read newQty
sed -i "s/\($title:$author\):[^:]:[^:]*:/\1:$newQty/" BookDB.txt
echo "Book's Qty has been updated successfully!"
fi
以下是如何使用
awk
:
script.awk的内容
:
以下是如何使用
awk
:
script.awk的内容
:
你应该考虑使用AWK。或者一个实际的数据库。(或实际的编程语言。)@IgnacioVazquez Abrams这是我任务的一部分,我设法更新了价格,但我似乎无法更新数量。一旦你完成了这项工作,学习如何在awk中完成。我以为J.K.罗琳写了《哈利波特》这本书。谢谢你们,你们救了我的命!你应该考虑使用AWK。或者一个实际的数据库。(或实际的编程语言。)@IgnacioVazquez Abrams这是我任务的一部分,我设法更新了价格,但我似乎无法更新数量。一旦你完成了这项工作,学习如何在awk中完成。我以为J.K.罗琳写了《哈利波特》这本书。谢谢你们,你们救了我的命!隐晦,但准确。隐晦,但准确。嗨,你给我的代码很管用,但NewQuantity某种程度上也取代了价格,我已经在编辑中解决了这个问题,还有一些其他问题。你能给我解释一下这行吗?sed-i“s/^($title:$author:[^:]*):[^::]*:/\1:$newQty:/”BookDB.txthh?它几乎是从您的原始脚本中逐字复制的(以一些小补丁为模)。如果你有一个新问题,我的建议是发布一个新问题,而不是在这里跟进,这里基本上只有你和我会看到。@Tripleee我的意思是,如果我决定在该行编辑时更新书名会怎么样?嗨,你给我的代码很管用,但是newQty替代了价格,我已经在编辑中修复了这个问题,还有一些其他问题。你能给我解释一下吗?sed-i“s/^($title:$author:[^:]*):[^::]*:/\1:$newQty:/”BookDB.txthh?它几乎是从您的原始脚本中逐字复制的(以一些小补丁为模)。如果你有一个新问题,我的建议是发布一个新问题,而不是在这里跟进,基本上只有你和我会看到。@Tripleee我的意思是,如果我决定更新书的标题,当我在那一行应该编辑吗?
BEGIN {
FS=OFS=":"
printf "Enter the book's name: "
getline name < "-"
printf "Enter author's name: "
getline author < "-"
printf "Enter new quantity: "
getline newQty < "-"
}
$1==name && $2==author { $4=newQty }1
$ cat BookDB.txt
Book name:author:price:Qty:Qty Sold
==================================
harry potter:james:12.99:197:101
===============================
$ awk -f script.awk BookDB.txt
Enter the book's name: harry potter
Enter author's name: james
Enter new quantity: 5000
Book name:author:price:Qty:Qty Sold
==================================
harry potter:james:12.99:5000:101
===============================