【问题标题】:replace current string from textfile database从文本文件数据库替换当前字符串
【发布时间】:2013-01-02 01:59:54
【问题描述】:

来自文本文件数据库格式,

客户:建屋局:价格:左:可用

特德:rm4:34:197:101

bash shell 脚本,

read -p $'Price: '  Price2
sed -i "s/$Customer:$HDB:$Price/$Customer:$HDB:$Price2/g" CustomerDB.txt

当我输入 43 时,数据库返回

特德:rm4:4334:197:101

如何将其替换为 43 而不是 34?

【问题讨论】:

    标签: linux bash shell ubuntu sed


    【解决方案1】:

    我个人会使用 awk 而不是 sed,因为它会自动将行解析为单独的字段。

    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 进行比较。如果它们相同,则将第三个字段设置为等于价格变量。

    然后我们打印出由 OFS var 的值分隔的所有字段(默认情况下为空格,但我们已覆盖为 :'s)

    here's a good awk intro

    【讨论】:

      【解决方案2】:

      好像$Price 是空的。你确定它包含旧价格吗?如果您想替换所有价格而不考虑旧值,您可以使用

      sed -i "s/$Customer:$HDB:[0-9]*/$Customer:$HDB:$Price2/g" CustomerDB.txt
      

      【讨论】:

        猜你喜欢
        • 2011-06-30
        • 1970-01-01
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-03
        • 2017-01-06
        相关资源
        最近更新 更多