更新文本文件中的字段,shell bash

Posted

技术标签:

【中文标题】更新文本文件中的字段,shell bash【英文标题】:Updating fields in text file, shell bash 【发布时间】:2013-01-20 09:25:23 【问题描述】:

我有一个文本文件。

文本文件中的信息是

Book1:Author1:10.50:50:5
Book2:Author2:4.50:30:10

第一个是书名,第二个是作者名,第三个是价格,第四个是数量,第五个是销量。

我正在尝试更新价格,它适用于:

read -p $'New Price: ' newPrice
sed "s/$Title:$Author:[^:]\+/$Title:$Author:$newPrice/g" BookDB.txt > tempBook.txt
mv -f tempBook.txt BookDB.txt
echo "Book price updated!"

当我退出程序并添加代码以更新数量时:

read -p $'New Quantity: ' newQty
sed "s/$Title:$Author:$Price:[^:]\+/$Title:$Author:$Price:$newQty/g" BookDB.txt > tempBook.txt
mv -f tempBook.txt BookDB.txt
echo "Book quantity updated!"

数量无法更新,因为我有点丢失了价格信息。如果我立即将一本新书添加到存储价格的程序中,我可以编辑数量,但对于其他书籍,无法编辑可用数量。

有人可以帮忙吗?我想知道我是否可以提取/存储这本书的价格价值。

【问题讨论】:

【参考方案1】:

您可以使用的更新数量:

read -p $'New Quantity: ' newQty
sed -re "s/$Title:$Author:([^:]+):[^:]+/$Title:$Author:\1:$newQty/g" BookDB.txt > tempBook.txt
mv -f tempBook.txt BookDB.txt
echo "Book quantity updated!"

【讨论】:

我是 bash shell 脚本的新手。请问 ([^:]+) 是做什么的?还有 [^:] , \1 是否取 ([^:]+) 的值? 1) ([^:]+) 是正则表达式,它匹配包含多个字符且所有这些字符不是':' 的字符串。 2) 是的。 1.5) [^:] 是正则表达式,匹配除':' 之外的任何字符。

以上是关于更新文本文件中的字段,shell bash的主要内容,如果未能解决你的问题,请参考以下文章

java文件中的setText如何更新fxml文件中的文本字段?

sh 如何在shell脚本/ bash中将输出附加到文本文件的末尾?

编写一个 Bash shell 脚本来读取 mongodb 日志文件并将其内容写入另一个文本文件

shell编程之文本小工具

Linux使用之grep,shell脚本(一)

bash shell环境变量