获取文件部分的值

use*_*014 7 shell text-processing

我有以下格式的配置文件。

<Title>
 [part1]
  A.File = a
  A.Val = val1
  B.File = a
  B.Val = val1
 [part2]
  A.File = a1
  A.Val = val2 
  B.File = a
  B.Val = val1
Run Code Online (Sandbox Code Playgroud)

我只想从第一部分提取值。

 #!/bin/sh 
getCalibDate()
{
 file="/path/of/config/file"
 value=`cat ${file} | grep Val | cut -d'=' -f2`
    for v in $value
    do
            echo $v
    done
}
getCalibDate
Run Code Online (Sandbox Code Playgroud)

上面的脚本将返回所有值。如何仅从第一部分(第 1 部分)获取值?

Nid*_*dal 8

如果您[part1]可以使用-A4选项后只有 4 行grep

cat ${file} | grep -A4 "part1" | cut -d'=' -f2`
Run Code Online (Sandbox Code Playgroud)

对于一般情况(在 [part1] 之后超过 4 行)使用sed获取两部分之间的文本:

cat ${file} | sed -n "/part1/,/part2/p" | head -n-1
Run Code Online (Sandbox Code Playgroud)

headpart2在末尾删除附加

正如terdon所说,您不必使用cat,您可以执行以下操作:

grep -A4 "part1" ${file} | cut -d'=' -f2`
Run Code Online (Sandbox Code Playgroud)

或者:

sed -n "/part1/,/part2/p" ${file} | head -n-1
Run Code Online (Sandbox Code Playgroud)