sed 替换第一场比赛中的所有行不起作用
sed to replace all line on the first match not working
这是我要编辑的文件
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;/
是一个 substitute 命令。它针对范围内的任何行执行。它用 listen_xyz 40;
替换任何行 (.*
)。这意味着它取代了 server {
以及 listen 99;
.
通过将替换命令更改为 s/listen.*/listen_xyz 40;/
,我们确保它只替换包含 listen
.
的行
这是我要编辑的文件
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;/
是一个 substitute 命令。它针对范围内的任何行执行。它用 listen_xyz 40;
替换任何行 (.*
)。这意味着它取代了 server {
以及 listen 99;
.
通过将替换命令更改为 s/listen.*/listen_xyz 40;/
,我们确保它只替换包含 listen
.