【问题标题】:linux script to update price更新价格的linux脚本
【发布时间】:2015-01-09 01:33:01
【问题描述】:

我想做一个提示用户输入书名和作者的代码,我想使用 grep 仅根据书名和作者获取数据并将其回显给用户查看和编辑价格无需用户输入旧价格

我需要帮助来尝试通过输入标题和作者来获取 $price 变量

function update_cost
{
   echo "Title: "
   read title
   echo "Author: "
   read author
   grep -iqs "$title:$author:$price:" BookDB.txt && echo "$title:$author:$price:"
   echo "New Price: "
   read price_r
   sed  -i "/^$title:$author:/ s/$price/$price_r"  BookDB.txt || tee BookDB.txt && echo "Book Price has been    updated sucessfully!"
}

【问题讨论】:

  • 你写的脚本有什么问题?
  • 您的grep 命令正在使用$price,但您从未设置过该变量。
  • 那么我应该如何修改它才能得到我需要的变量呢?
  • 我建议在前两列与标题和作者匹配时使用awk打印第三列。
  • 可以举个例子吗?

标签: shell sed grep


【解决方案1】:

关于上面的问题,我想出了一个答案。希望对你有帮助

 price=$(echo "$result" | cut -f 3 -d ":")

我设法通过将用户输入的第三个字段与结果行匹配,然后使用我编辑了第三个字段的 sed 行来获得。

function update_cost
{
   echo "Enter Title: "
   read title
   echo "Enter Author: "
   read author
   result=$(grep -ise "$title\:$author" BookDB.txt)
   price=$(echo "$result" | cut -f 3 -d ":")
   grep -iqs "$title:$author:$price:" BookDB.txt && echo "Book Found!"      
   echo "New Price: "
   read new_price
   sed -i "/^$title:$author:$price:/ s/$price/$new_price/" BookDB.txt || tee BookDB.txt && echo "Price has been updated sucessfully!"   

}

【讨论】:

    【解决方案2】:

    awk 更适合从文件中提取字段并将其分配给变量。

    function update_cost
    {
       echo "Title: "
       read title
       echo "Author: "
       read author
       price=$(awk -F: -v title="$title" -v author="$author" '$1 == title && $2 == author { print $3 }' BookDB.txt)
       echo "Old price is $price"
       echo "New Price: "
       read price_r
       sed  -i "/^$title:$author:/ s/:$price:/:$price_r:/"  BookDB.txt || tee BookDB.txt && echo "Book Price has been updated sucessfully!"
    }
    

    【讨论】:

    • 对不起,我想问一下 =$ 是做什么的?为什么-F:-v?不熟悉awk
    • $(command) 执行命令并替换其输出;这是基本的 shell 脚本语法。 -F: 将字段分隔符设置为 : 而不是 awk 中的空格(在文档中)。
    • 嗨,我使用了价格线,但它并没有与旧价格相呼应,而是继续使用新价格
    • 它显示成功消息但没有任何改变
    • 我省略了 awk 的文件名参数。我解决了这个问题,现在它对我有用。
    猜你喜欢
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多