我有这个代码类似于我的另一个问题代码,但这次我正在尝试编辑标题,但是使用作者作为标准并单独留下重复项。但是当我运行代码时,它与使用标题作为匹配条件和编辑作者的效果不同。
我想知道我该如何纠正这个问题。谢谢你的帮助。
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!"
}
答案 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
(代码是以批处理模式生成的,具有多个作者/标题可以更改,因此您可以简化回显返回和检查任何更改的方法)