KSH在字符串匹配后替换字符串

时间:2015-08-07 15:38:31

标签: regex awk sed ksh

我第一次登上Stack:

我按照以下方式进行模式匹配。在这种情况下,$ VAR1是" / usr / lib / sendmail"。使用while循环从单独的文件中读取变量。

cat /etc/rc.tcpip |grep -w "^start[[:blank:]]${VAR1}"

我想"评论该行" (#)在比赛开始时。我确定它很好但我似乎无法弄清楚如何让它发挥作用。

如此现有的一行:

start /usr/lib/sendmail "$src_running" "-bd -q${qpi}"

期望的结果:

# start /usr/lib/sendmail "$src_running" "-bd -q${qpi}"

1 个答案:

答案 0 :(得分:1)

尝试

sed '\|^start[[:blank:]]'"$VAR1"'|s/^/# /' /etc/rc.tcpip

你需要\|作为你的var /。如果您接受-i,则可以将结果放在同一个文件中。

通常sed命令采用以下形式:

/pattern1/s/pattern2/replacement/

其中pattern1选择要应用替换(s)的行,pattern2是什么 匹配,替换是替换匹配的内容。在您的情况下,pattern1包含斜杠char /,因此要在pattern1中使用它,需要使用\进行转义。但是斜杠在$ VAR1内,所以我们需要编辑$ VAR1以用/替换每个\/

相反,使用替代分隔符代替/更简单,仅用于/ pattern1 /。这个语法有点离奇和非对称:

\|pattern1|s/pattern2/replacement/

该行开头的\表示下一个字符是另一个分隔符。我选择|,但另一个不在pattern1中的char也可以做到,例如

\;pattern1;s/pattern2/replacement/