gpt4 book ai didi

sed - 在 bash 中的正则表达式之后的下 n 个非空行中添加一个字符

转载 作者:行者123 更新时间:2023-12-04 15:54:55 25 4
gpt4 key购买 nike

我有一个包含以下行的配置文件,想知道添加“;”的方法在 [treadmill] 之后的每一行的开头,直到下一个空白行。我想从脚本中执行此操作,因为将根据该环境的配置包含这些行。

[treadmill]
type = aor
contact = server.domain.com

[A_SRV]
type = aor
contact = serverA.domain.com

[B_SRV]
type = aor
contact = serverB.domain.com

[treadmill]
type = identify
endpoint = treadmill
match = server.domain.com

[C_SRV_IDEN]
type = identify
endpoint = sip
match = server.domain.com

[treadmill]
type = endpoint
context = LocalSets
dtmf_mode = rfc4733
disallow = all
allow = ulaw
direct_media = no
aors = treadmill

最佳答案

sed -e '/\[treadmill\]/,/^$/{//!s/^/;/}' treadmill.txt

解释:

  • /\[treadmill\]/,/^$/使用 /START/,/END/在花括号中应用后续命令的语法 {}在 START 到 END 行范围内,包括 START 和 END 行。 /^$/需要一个完全空的行,没有空格。

  • {//!s/^/;/}是大括号中的一个命令,在上述范围内应用。

  • //!表示“与上一个匹配项不匹配”,如 //是上一场比赛。这会阻止处理 START 和 END 行

  • //!s/^/;/链接替换 ​​s/^/;///! 所在的行上是真的。这会在 START 和 END 之间的每一行中添加一个分号

  • 我对添加分号的最初建议是 s/.*/;&/ - 这取代了 .*;&其中 &在替换侧对应于任何 .*匹配。正如@WilliamPursell 评论的那样,这可能不如s/^/;/ 清楚。

  • 在某些 shell 中,!是一个特殊字符,也需要反斜杠转义。在 bash 中不转义应该没问题。

输出:

[treadmill]
;type = aor
;contact = server.domain.com

[A_SRV]
type = aor
contact = serverA.domain.com

[B_SRV]
type = aor
contact = serverB.domain.com

[treadmill]
;type = identify
;endpoint = treadmill
;match = server.domain.com

[C_SRV_IDEN]
type = identify
endpoint = sip
match = server.domain.com

[treadmill]
;type = endpoint
;context = LocalSets
;dtmf_mode = rfc4733
;disallow = all
;allow = ulaw
;direct_media = no
;aors = treadmill

关于sed - 在 bash 中的正则表达式之后的下 n 个非空行中添加一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43056343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com