Sed更新标题但使用第2列作者作为匹配条件

时间:2015-01-09 03:14:25

标签: shell sed grep

我有这个代码类似于我的另一个问题代码,但这次我正在尝试编辑标题,但是使用作者作为标准并单独留下重复项。但是当我运行代码时,它与使用标题作为匹配条件和编辑作者的效果不同。

我想知道我该如何纠正这个问题。谢谢你的帮助。

e.g 文本文件BookDB.txt它包含以下

Wolverine:Stan Lee:5:1:1
Wolverine:Stan Tan:1:1:1

我想将Wolverine:Stan Tan的标题更改为例如武器X.我尝试使用下面的代码,但它不起作用。如果我删除/ ^ $ author:/他们将改变两者。所以txt文件应该改为

Wolverine:Stan Lee:5:1:1
Weapon X:Stan Tan:1:1:1

  function update_author
{
     echo "Title: "
     read title
     echo "Author: "
     read author
     grep -iqs "$title:$author:" BookDB.txt && echo "Book Found\n"
     echo "New Title: "
     read title_r
     sed -i "/^$author:/ s/$title/$title_r/" BookDB.txt || tee BookDB.txt && echo "Book Author has been updated sucessfully!"
}

2 个答案:

答案 0 :(得分:1)

使用此功能,首先你获得标题并与作者匹配,以便在切换作者之前使其独一无二,这样我就不会删除每一个可能的匹配

sed -i "/^$title:$author:/ s/$author/$author_new/" BookDB.txt

答案 1 :(得分:0)

通过

更改上一个sed行
Status="$( sum BookDB.txt )"
sed -i "/^\(${author}\):${title}:/ s//\1:${title_r}:/" BookDB.txt
if [ "${Status}" = "$( sum BookDB.txt )" ]
 then
   echo "Book Author has no modification for [${author}:${title}]"
 else
   echo "Book Author has been updated sucessfully for [${author}:${title}] !"
 fi

(代码是以批处理模式生成的,具有多个作者/标题可以更改,因此您可以简化回显返回和检查任何更改的方法)