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 部分)获取值?
如果您[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)
head是part2在末尾删除附加
正如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)