sed - sed 替换第一场比赛中的所有行不起作用
问题描述
这是我要编辑的文件
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
。
推荐阅读
- swift - 将图像上传到 Firebase Storage Swift 时内存崩溃
- notifications - 客户端 Blazor 应用程序,按下按钮时向计算机上的应用程序发送通知
- simulate - 使用每个级别的已知值模拟分类变量
- java - 64 位服务器 VM 警告:选项 -Xverify:none 和 -noverify 在 JDK 13 中已弃用。从环境变量中删除 -Xverify:none 是否安全?
- html - 如何使 iframe 滚动到 iOS 上父内容中的锚点?
- video-editing - 您将如何在 kdenlive 中一起加速多个剪辑?
- sql - 有没有办法在 SQL Server 2017 中确定查询的列中是否存在重复项并更改该输入?
- java - Spock groovy - 如何在同一个类中模拟方法?
- node.js - 如何处理猫鼬连接重置
- c# - 更改存储为 MongoDB 文档中的字符串的枚举值