这是我想要编辑的文件
server {
listen 99;
listen 200;
listen 300;
server_name xxxx;
root xxxx;
...
我想将包含'listen'的第一行更改为'listen_xyz 40;'这样的新单词,这是我的代码:
sed -i -e '0,/listen/s/.*/listen_xyz 40;/' file
为什么它也替换第一行(不匹配模式),所以我的文件现在看起来像这样:
listen_xyz 40;
listen_xyz 40;
listen 200;
listen 300;
server_name xxxx;
root xxxx;
...
什么是我的sed代码错误,为什么它取代第一行甚至它不匹配我的模式?
尝试:
$ sed -e '0,/listen/ s/listen.*/listen_xyz 40;/' file
server {
listen_xyz 40;
listen 200;
listen 300;
server_name xxxx;
root xxxx;
...
0,/listen/
是一个范围。它匹配从文件开头到匹配正则表达式listen
的第一行的所有行。因此,这与样本文件的前两行匹配。
s/.*/listen_xyz 40;/
是替补命令。它针对范围内的任何行执行。它用.*
替换任何线(listen_xyz 40;
)。这意味着它取代server {
以及listen 99;
。
通过将替换命令更改为s/listen.*/listen_xyz 40;/
,我们确保它只替换包含listen
的行。