我正在尝试使用sed。
编辑ports.conf文件中的Listen 80
由于该文件如下:
Listen 80
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
使用此命令: head -n1 sed_test | sed -i -e's / Listen [0-9] + / Listen 80 / 1p'sed_test
它会更改文件中的所有“Listen $ port_number”。我想这是因为在第二个命令中我指定了一个文件。
如果我没有指定它应该写入哪个文件,我会收到错误
sed: no input files
这虽然合乎逻辑。
我知道只能使用sed才能完成,但我不确定如何只编辑一行并将其替换为我的自定义值。
所以这就是我想要完成的事情:
sed -i -e some_command / Listen 8080 file
cat文件 - &gt;
Listen 8080
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
怎么做?
答案 0 :(得分:2)
如果您使用gnu sed
,可以使用:
sed -i '0,/Listen [0-9]*/s//Listen 8080/' file
Listen 8080
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
如果您没有gnu sed
,则可以使用awk
仅替换第一个实例:
awk '!p{ p=sub(/Listen [0-9]*/, "Listen 8080") } 1' file
Listen 8080
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
答案 1 :(得分:1)
可以使用标准sed
完成:
sed '/Listen/{s/\([0-9]\+\)/8080/; :a;n; ba}' file