SED:在第一个匹配后追加

SED:在第一个匹配后追加,sed,Sed,是否有方法仅在第一次匹配后使用sed追加文本?我有这样的东西,但文本每隔一行插入一行: sed -e '0,/priority/a\exclude = php*' /etc/yum.repos.d/epel.repo 文件 更新: 所需输出-exclude=php*应仅在第一次回购([epel])中: 你可以说: sed '/^priority/{s/.*/&\nexclude = php*/;:a;n;ba}' /etc/yum.repos.d/epel.repo 你可以说: se

是否有方法仅在第一次匹配后使用
sed
追加文本?我有这样的东西,但文本每隔一行插入一行:

sed -e '0,/priority/a\exclude = php*' /etc/yum.repos.d/epel.repo
文件

更新:

所需输出-
exclude=php*
应仅在第一次回购([epel])中:

你可以说:

sed '/^priority/{s/.*/&\nexclude = php*/;:a;n;ba}' /etc/yum.repos.d/epel.repo
你可以说:

sed '/^priority/{s/.*/&\nexclude = php*/;:a;n;ba}' /etc/yum.repos.d/epel.repo

除了sed之外的
awk
解决方案

awk '/^priority/ && !f {$0=$0 RS "nexclude = php*";f=1}1' file

如果找到搜索并且
f=0
,则添加文本并设置
f=1
。这可以防止在
sed
之外的
awk
解决方案之后添加文本

awk '/^priority/ && !f {$0=$0 RS "nexclude = php*";f=1}1' file
sed  '/priority/{x;/1/{x;b};s/^/1/;x;s/.*/&\nexclude = php*/}' file
如果找到搜索并且
f=0
,则添加文本并设置
f=1
。这将防止在所有
优先级之后添加文本

sed  '/priority/{x;/1/{x;b};s/^/1/;x;s/.*/&\nexclude = php*/}' file
上面这行可能适合你


以上这一行可能适合您。

您希望新行在哪里?您显示的命令清楚地在指定范围内的每一行后面添加一行。我已经更新了我的问题。谢谢你想要新的线路在哪里?您显示的命令清楚地在指定范围内的每一行后面添加一行。我已经更新了我的问题。ThanksOP只在sed中提到过。我知道,但它总是很好的变体,可能是OP不知道它在
awk
中是可能的。另外,
awk
代码可能比只在sed中提到的
sed
OP中的代码更容易理解/阅读。我知道,但它总是很好的变化,可能是OP不知道它在
awk
中是可能的。另外,与
sed
中的代码相比,
awk
代码可能更容易理解/阅读,标签的良好使用,巧妙的解决方案!比我的简单+1您能解释一下这些选项的作用吗
;:A.Nba
-看起来这个命令在没有它们的情况下可以工作?@HTF否如果没有突出显示的部分,该行将附加到以
优先级开始的所有行中。请参见.anadis mbp:tmp anadi$sed'/^gpgkey/{s/*/&\nexclude=php*/;:a;n;ba}'yum1.repo sed:1:“/^gpgkey/{s/*/&\nexclu…”:意外的EOF(挂起的)我在尝试sed命令时遇到此错误。我正在尝试在gpgkey=file://….之后的base部分下添加行。。。。这恰好是rep定义文件中所有部分的最后一行标签的使用很好,聪明的解决方案!比我的简单+1您能解释一下这些选项的作用吗
;:A.Nba
-看起来这个命令在没有它们的情况下可以工作?@HTF否如果没有突出显示的部分,该行将附加到以
优先级开始的所有行中。请参见.anadis mbp:tmp anadi$sed'/^gpgkey/{s/*/&\nexclude=php*/;:a;n;ba}'yum1.repo sed:1:“/^gpgkey/{s/*/&\nexclu…”:意外的EOF(挂起的)我在尝试sed命令时遇到此错误。我正在尝试在gpgkey=file://….之后的base部分下添加行。。。。这恰好是rep定义文件中所有部分的最后一行