如何使用grep捕获匹配?

时间:2016-09-28 18:20:29

标签: bash grep

我正在尝试编写一个脚本,该脚本会增加配置文件中的整数。我正在尝试使用grep来查找当前值:

$ grep versionNumber myfile.conf
          versionNumber 123789
^ whitespace
          ^ the key I need to match
                        ^ the value I need to capture

我想要的结果是捕获上面示例中的123789

为了捕获这个值我需要做什么?

4 个答案:

答案 0 :(得分:2)

你可以这样做:

grep versionNumber myfile.conf | grep -oE '[0-9]+'

或者

grep versionNumber myfile.conf | awk '{print $2}'

或者

grep versionNumber myfile.conf | cut -d' ' -f2

或者如果您拥有支持-P模式的GNU grep:

grep -oP 'versionNumber \K\d+' myfile.conf

答案 1 :(得分:2)

使用awk

awk '/versionNumber/{print $2}' myfile.conf

答案 2 :(得分:2)

使用grep -oP(pcre模式);

s='          versionNumber 123789'
grep -oP 'versionNumber\h+\K\S+' <<< "$s"

123789

答案 3 :(得分:0)

脚本,使用Gnu awk v.4.1.0 +增加配置文件中的整数

测试文件:

$ cat > file
foo
           versionNumber 123789
bar

使用就地编辑功能:

$ awk -i inplace '/versionNumber/ {n=index($0,"v"); sub($2,$2+1); printf "%-"n"s\n", $0; next} 1' file

结果:

$ cat file
foo
           versionNumber 123790
bar

说明:

在原地编辑文件的关键是-i inplace

/versionNumber/ {          # if versionNumber found in record
    n=index($0,"v")        # count leading space amount to n
    sub($2,$2+1)           # increment the number in second field
    printf "%-"n"s\n", $0  # print n space before the (trimmed) record
    next                   # skip print in the next line
} 1                        # print all other records as were