我正在尝试在文件中搜索文本并将其存储到变量中。
我的文件看起来像这样:
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`
答案 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' "$@"
.bak
在filename
中保存filename.bak
的备份;如果您不想备份,请从命令行中删除.bak
(但保留-i
)。正则表达式上的e
修饰符表示将替换视为表达式。值$2
等是只读的,因此将递增的值保存到$x
,然后将其用作字符串的一部分。逗号运算符评估其LHS,然后评估其RHS。