尝试使用 sed 编辑文件中的信息

Trying to edit information in File using sed

我有下面的代码来更新文件中的信息,但我只希望编辑许多重复项中的一个。我只希望编辑 Weapon X 的领域 Stan Lee,但是当我运行代码时,它编辑了所有不同领域的 Stan Lee。 例如

$ cat BookDB.txt
Weapon X:Stan Lee
Gambit:Stan Lee
Avengers:Stan Lee

代码:

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

前导正则表达式限制了替换。

如果用户键入带有 / 字符的值,这将中断,因此您应该转义它们:

sed -i "/^${title_upa//\//\/}:/ s/${author_upa//\//\/}/${author_upar//\//\/}/" BookDB.txt

这看起来有点可笑。让我们试试不同的工具:

tmp=$(mktemp)
awk -F: -v OFS=: -v title="$title_upa" -v author="$author_upa" -v new="$author_upar" '
     == title &&  == author { = new}
    {print}
' BookDB.txt > "$tmp" && mv "$tmp" BookDB.txt

我看到了一个与此类似的问题,所以这是我的解决方案,通过在切换作者之前将标题和作者放在一起来更改 sed 行

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