- 論壇徽章:
- 0
|
本帖最后由 j3kljs02398j 于 2011-09-05 13:09 編輯
只用grep基本做不到,因?yàn)間rep是基于行處理的。要提取內(nèi)容是 server { ...{} ... }標(biāo)記的。所以想到用的是sed和awk。
第一種: 直接命令調(diào)用- sed '1,/^ server {$/d' filename | awk -v count=1 '{\
- if ($NF == "{")
- count++
- if ($1 == "}")
- count--
- if (count == 0)
- exit 0
- print $0
- }' > result
復(fù)制代碼 第二種: 放在shell腳本中執(zhí)行(便于批處理)- #! /bin/sh
- #用法
- #get_conf filename[s]
- umask 022
- while [ "$1" != "" ];
- do
- sed '1,/^ server {$/d' $1 | awk -v count=1 '{\
- if ($NF == "{")
- count++
- if ($1 == "}")
- count--
- if (count == 0)
- exit 0
- print $0
- }'
- shift
- done
復(fù)制代碼 注意:
兩種方法中,對于配置文件的格式要求很嚴(yán)格,"{"前一定要有空格且作為本行的末尾,“}"獨(dú)自一行。否則出錯(cuò)! |
|