con=`sed -n "/name/,/[.*]/{/^[.*]/d /^[ ]*$/d s/;.*$// s/^[|]*$1[|]*=[|]*\(.*\)[|]*/\1/p }" $conf`上面的sed部分看不懂,
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/14 14:09:06
![con=`sed -n](/uploads/image/z/15123125-29-5.jpg?t=con%3D%60sed+-n+%22%2Fname%2F%2C%2F%5B.%2A%5D%2F%7B%2F%5E%5B.%2A%5D%2Fd+%2F%5E%5B+%5D%2A%24%2Fd+s%2F%3B.%2A%24%2F%2F+s%2F%5E%5B%7C%5D%2A%241%5B%7C%5D%2A%3D%5B%7C%5D%2A%5C%28.%2A%5C%29%5B%7C%5D%2A%2F%5C1%2Fp+%7D%22+%24conf%60%E4%B8%8A%E9%9D%A2%E7%9A%84sed%E9%83%A8%E5%88%86%E7%9C%8B%E4%B8%8D%E6%87%82%2C)
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命令,所以从实际工作过程来讲,保留后两条命令足矣.