bash - 在文件中搜索文本并将其存储到变量中

时间:2012-01-02 07:38:34

标签: bash scripting sed

我正在尝试在文件中搜索文本并将其存储到变量中。

我的文件看起来像这样:

Type: Furniture
Color: Blue
Version: 1

我正在尝试搜索版本号并将其存储到变量中并递增它。我在搜索文件时不知道这个号码。到目前为止,我有类似的东西。

VERSIONNUMBER=//Somehow I want to get the version # from the file. 
VERSIONNUMBER=`expr $VERSIONNUMBER + 1'

sed -i "s/Version:.*/Version=$VERSIONNUMBER/" filename

到目前为止我是在正确的轨道上还是有更好的方法来做到这一点?我在搜索版本号时遇到问题。我一直在收到语法错误。非常感谢任何帮助。

VERSIONNUMBER=`sed -i "s/Version:/*" filename`

2 个答案:

答案 0 :(得分:6)

这是awk的工作

 awk '/Version:/{$2++}1' ./infile > ./outfile

实施例

$ awk '/Version:/{$2++}1' ./infile
Type: Furniture
Color: Blue
Version: 2

解释

/Version:/仅匹配包含文本“Version:”

的行

$2++:获取第二个字段,默认情况下awk用空格分隔,然后递增

{...}1:在进行任何更改后告诉awk print行的快捷方式

答案 1 :(得分:2)

如果要原位覆盖文件,则可以使用Perl而不是Awk。

perl -i.bak -p -e 's/^(Version: )(\d+)/$x=$2+1,"$1$x"/e' "$@"

.bakfilename中保存filename.bak的备份;如果您不想备份,请从命令行中删除.bak(但保留-i)。正则表达式上的e修饰符表示将替换视为表达式。值$2等是只读的,因此将递增的值保存到$x,然后将其用作字符串的一部分。逗号运算符评估其LHS,然后评估其RHS。