尝试使用 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
我有下面的代码来更新文件中的信息,但我只希望编辑许多重复项中的一个。我只希望编辑 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