con=`sed -n "/name/,/[.*]/{/^[.*]/d /^[ ]*$/d s/;.*$// s/^[|]*$1[|]*=[|]*\(.*\)[|]*/\1/p }" $conf`上面的sed部分看不懂,

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/10 23:33:06
con=`sed -n

con=`sed -n "/name/,/[.*]/{/^[.*]/d /^[ ]*$/d s/;.*$// s/^[|]*$1[|]*=[|]*\(.*\)[|]*/\1/p }" $conf`上面的sed部分看不懂,
con=`sed -n "/name/,/[.*]/{/^[.*]/d /^[ ]*$/d s/;.*$// s/^[|]*$1[|]*=[|]*\(.*\)[|]*/\1/p }" $conf`
上面的sed部分看不懂,

con=`sed -n "/name/,/[.*]/{/^[.*]/d /^[ ]*$/d s/;.*$// s/^[|]*$1[|]*=[|]*\(.*\)[|]*/\1/p }" $conf`上面的sed部分看不懂,
花括号之前为定址部分,表示对哪些行应用后面的命令,/name/,/[.*]/是用逗号分隔两个正则表达式的定址形式,可以理解成有一个控制是否对当前行进行处理的标志,遇到包含字符串"name"的行(/name)开启标志,然后再遇到包含点号或星号(/[.*]/)就关闭标志,然后再遇到遇到包含字符串"name"的行(/name)开启标志……在标志有效时才执行花括号内的命令.
花括号的命令部分:
花括号内共有四条命令,一次对每行执行这四条命令,前一条命令的处理结果会影响后续的命令.
/^[.*]/d:如果该行以点号或星号开头,删除;
/^[ ]*$/d:如果该行为空白行,即只有空格或连空格都没有,删除;
s/;.*//:如果该行包含分号,将分号以及分号后的内容删除;
s/^[|]*$1[|]*=[|]*\(.*\)[|]*/\1/p:如果该行经过以上处理后,符合这个格式:开头为0个或多个|,接着是$1,接着是0个或多个|,接着是=,接着是0个或多个|,接着是任意内容,接着是0个或多个|,就将整行替换为任意内容那里的内容(如:|||$1||||||||||=||||hehe|||||||||||||||abc替换成hehe).
其实因为已经指定了"-n"参数,也就不会自动打印模式空间中的行内容,所以第1,2条命令其实是没有实际意义的,只有最后一条命令使用了p命令,所以从实际工作过程来讲,保留后两条命令足矣.