假设我的文本文件中有这一行,格式如下。
"Title:Author:Price:QtyAvailable:QtySold"
我的文本文件的内容如下所示
Hello World:Andreas:10.50:10:5
Lord Of The Rings:Duke:50.15:50:20
(some other records...)
1) 用户输入作者和标题。
2) 如果程序找到作者+标题,它会要求用户更新任何可用字段(对于本例,标题、作者、价格等。
3) 例如,我想更新《Hello World》这本书的价格。
4) 我该怎么做才能告诉程序提取 Hello World 行的内容,并进入 10.50 以替换书的价格? (假设图书的新价格将由用户输入决定)
希望得到我的答复。 提前感谢那些提供帮助的人!
最佳答案
您可以像这样使用带可变参数的 sed:
# book title:author to be searched
BOOK="Hello World:Andreas"
# price to be updated
PRICE=11.25
# search and update with original backed up with .bak extension
sed -i.bak 's/\('"$BOOK"'\):[^:]*:/\1:'"$PRICE"':/' file.txt
解释:
如果您将 shell 变量填入 sed 命令,它将如下所示:
sed 's/\(Hello World:Andreas\):[^:]*:/\1:11.25:/'
匹配
"$BOOK" # match literal text i.e. Hello World:Andreas
\($BOOK\) # group this text to be back referenced later
: # match literal :
[^:]* # match 0 or more characters until : is found
: # match a :
替换
\1 # group # 1 i.e. Hello World:Andreas
: # a literal :
$PRICE # fill in the new price
: # literal :
本质上,此 sed 命令正在查找具有 Hello World:Andreas:
后跟 一些价格值,然后是另一个 :
的文本。一旦找到这个模式,它就会用反向引用 #1(即 Hello World:Andreas
)替换它,然后是一个 :
,然后输入新的价格值和一个冒号 :
.
编辑:强烈建议您阅读一些 sed 教程,但是根据您的评论,我正在为您提供更新数量的命令:
# book title:author to be searched
BOOK="Hello World:Andreas"
# quantity to be updated
QTY=18
# search and update with original backed up with .bak extension
sed 's/^\('"$BOOK"'\):\([^:]*\):[^"]*:/\1:\2:'"$QTY"':/'
关于linux - 从文本文件进入一行并编辑它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9022278/