gpt4 book ai didi

bash - sed中 "0,/xxx"是什么意思?

转载 作者:行者123 更新时间:2023-11-29 09:37:56 25 4
gpt4 key购买 nike

脚本中使用的sed命令如下:

sed -i "0,/^ENABLE_DEBUG.*/s/^ENABLE_DEBUG.*/ENABLE_DEBUG = YES/" MakeConfig

我知道

s/^ENABLE_DEBUG.*/ENABLE_DEBUG = YES/

是替代行前缀

ENABLE_DEBUGENABLE_DEBUG = YES

但是不知道是什么意思

0,/^ENABLE_DEBUG.*/

谁能帮帮我?

最佳答案

0,/^ENABLE_DEBUG.*/ 表示替换只会发生在从开头 0 到匹配 /的第一行的行上^ENABLE_DEBUG.*/。即使它们匹配 /^ENABLE_DEBUG.*/

,也不会在后续行中进行替换

范围的其他例子

这将仅替换第 2 行到第 5 行:

sed '2,5 s/old/new/'

这将从第 2 行替换到它之后的第一行,其中包括 something:

sed '2,/something/ s/old/new/'

这将从包含 something 的第一行替换到文件末尾:

sed '/something/,$ s/old/new/'

POSIX 与 GNU 范围:“0”行的含义

考虑这个测试文件:

$ cat test.txt
one
two
one
three

现在,让我们在 1,/one/ 范围内应用 sed:

$ sed '1,/one/ s/one/Hello/' test.txt
Hello
two
Hello
three

范围从第 1 行开始,到第 1 行之后匹配 one 的第一行结束。因此上面进行了两次替换。

假设我们只想替换第一个 one。使用 POSIX sed,这不能用范围来完成。正如 NeronLeVelu 指出的那样,GNU sed 为这种情况提供了扩展:它允许我们将范围指定为 0,/one/。此范围以文件中第一次出现 one 结束:

$ sed '0,/one/ s/one/Hello/' test.txt
Hello
two
one
three

因此,范围 0,/^ENABLE_DEBUG/ 以以 ENABLE_DEBUG 开头的第一行结束,即使该行是第一行。这需要 GNU sed。

关于bash - sed中 "0,/xxx"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31869731/

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