原文:https://blog.csdn.net/zeweig/article/details/42554099
wanxiaoderen: 这句 判断理解难度略高,查资料半天后,我来解释下 (awk的使用(不了解的可以扫盲)http://blog.chinaunix.net/uid-23302288-id-3785105.html)
[plain] view plain copy
- ReadINI=`awk -F '=' '/\['$Section'\]/{a=1}a==1&&$1~/'$Key'/{print $2;exit}' $Configfile
-F '分隔符' 操作命令 被操作文件
------------------------------------------------------------------------------------------------------------
-F '=' 对每行进行划分 每行起始字符串设为 $1 遇到 ‘=’ 自动设为$2 依次类推
------------------------------------------------------------------------------------------------------------
操作命令 '/\['$Section'\]/{a=1}a==1&&$1~/'$Key'/{print $2;exit}' 其实是 comand1 && comand2 把两个条件链接到一块
------------------------------------------------------------------------------------------------------------
command1 ---- '/\['$Section'\]/{a=1}a==1&& /\['$Section'\]/ 一个匹配字符串
------------------------------------------------------------------------------------------------------------
{a=1}a==1 一个恒等式而已 永为true 也就是说 {b=1}b==1也行 command1的总体效果会筛选出 【sectionname】(包括自己)后的所有字段(目前【不清楚】为什么一个‘/匹配/Ture/'会匹配到所有后续字段,如果只有一个/匹配/ 只会匹配到一行)
------------------------------------------------------------------------------------------------------------
command2 :command1会生成N多行,每行用‘=’分隔依次生成 $1 $2 $3.... $1~/$key/ 匹配含有 $key变量的 行,但是问题是 如果section1后面有个 key1 = 5;section2 在section后也有个 key1 = 6 ; 假如 key =key1 会将后面所有含有key1的行全部找出来,为了解决这个问题,后面有处理
------------------------------------------------------------------------------------------------------------
由于是ini文件,所以只需要 $2 所以打印出 print $2 当然也可以 print $1,为了解决上述问题,附加了exit 保证了只打一行就退出
------------------------------------------------------------------------------------------------------------
上述的解释中还有一个【不清楚的地方】,那个大佬能解答下,而且应该有更优的匹配方式