Shell脚本:转到文件的特定行并在unix中读取其余部分

时间:2016-01-07 20:47:28

标签: shell

我计划从我的脚本中准备一个主参数文件,如下图所示。

>cat ReferenceFile.cfg

ENV_VARIABLE:
{
aaa='asdfa'
Temp_Dir='/asdf/casdf/asd/'
Script_Dir='/asdf/asd/adsf/'
}

ArchiveDetails:
{
FOLDERS      PATERN    DAYS_TO_RETAIN    MINIMUM_SIZE_THESHOLD(MB)
/aaa/bbb/      *             3                          300
/ddd/eee/      *.txt         4
/aaa/ccc/       ABC*         4                          2000
}

Exceptions:
{
EXTENSIONS
.sh
.ksh
.cfg
}

...
...
...

为了阅读ENV_VARIABLE:下的内容,我需要到达那里并执行以下操作。

cat /param/paramter.cfg | while read line
do
<Reach the line under EVN_VARIABLE>
eval $line
done

为了阅读ArchiveDetails:下的内容,我需要到达那里并执行以下操作。

    cat /param/paramter.cfg <Reach the line under ArchiveDetails>
    | while read FOLDERS PATERN DAYS MINIMUM_SIZE
    do
    ...
    ...
    done

同样聪明,我会为例外而做。 我的问题是,我如何直接到达指定的部分。与ArchiveDetails或Exceptions等下的段一样 我一看到&#39;}&#39;}就匆匆退出阅读。并使用&#39; break&#39;命令。还有其他更好的方法吗?

建议我。提前谢谢。

1 个答案:

答案 0 :(得分:0)

最简单的方法就是使用sed删除您要查找的起始行的所有内容:

sed -e 1,/^ENV_VARIABLE:/d < ReferenceFile.cfg | while read line; do
    ...
done

将sed命令扩展为仅返回您正在寻找的“部分”并不困难:

SECTION=ENV_VARIABLE
CFG=ReferenceFile.cfg
CFGSECT=$(sed -n -e 1,/^$SECTION:/d -e /^{/d -e /^}/q -ep < $CFG)
eval "$CFGSECT"