我第一次登上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}"
答案 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/