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

use*_*811 1 bash scripting sed

我试图在文件中搜索文本并将其存储到变量中.

我的文件看起来像这样:

Type: Furniture
Color: Blue
Version: 1
Run Code Online (Sandbox Code Playgroud)

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

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

sed -i "s/Version:.*/Version=$VERSIONNUMBER/" filename
Run Code Online (Sandbox Code Playgroud)

到目前为止我是在正确的轨道上还是有更好的方法吗?我在搜索版本号时遇到问题.我一直在收到语法错误.任何帮助深表感谢.

VERSIONNUMBER=`sed -i "s/Version:/*" filename`
Run Code Online (Sandbox Code Playgroud)

Sie*_*geX 6

这是awk的工作

 awk '/Version:/{$2++}1' ./infile > ./outfile
Run Code Online (Sandbox Code Playgroud)

$ awk '/Version:/{$2++}1' ./infile
Type: Furniture
Color: Blue
Version: 2
Run Code Online (Sandbox Code Playgroud)

说明

/Version:/ 仅匹配包含文本"Version:"的行

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

{...}1:一个快捷方式,告诉awk print在进行任何更改后将其排除在外

  • 更确切地说,`1`是一个新模式,一个总是正确的模式,默认操作是'print $ 0`.(Awk脚本是`pattern/action`对的序列.)因此`awk 1/etc/passwd`是`cat/etc/passwd`的较慢变体. (2认同)
  • @ user459811是的,`awk`不支持像`sed -i`这样的inplace编辑.但请注意,`sed -i`不可移植,它是GNUism.而且你可能已经发现,如果你试图将文件重定向到自己,你最终会把文件冲洗干净.您需要手动复制它. (2认同)