2g 无法在 sed 中工作以跳过匹配项的第一次出现
2g is not working in sed to skip the first occurrence of a match
我正在尝试使用 sed 替换 xml 文件中的一些文本。我可以替换我的文本,但我想跳过第一次出现的内容。我正在使用 2g,但它不工作。没有错误显示,但文件没有变化。
我的 Xml 文件:
<file-min-size>10830</file-min-size>
<rotate-log>true</rotate-log>
<file-min-size>25600</file-min-size>
<rotate-log>true</rotate-log>
<file-min-size>32300</file-min-size>
<rotate-log>true</rotate-log>
<file-min-size>13456</file-min-size>
<rotate-log>true</rotate-log>
我的预期输出:
<file-min-size>10830</file-min-size>
<rotate-log>true</rotate-log>
<file-min-size>25600</file-min-size>
<rotate-log>true insertvalue</rotate-log>
<file-min-size>32300</file-min-size>
<rotate-log>true insertvalue</rotate-log>
<file-min-size>13456</file-min-size>
<rotate-log>true insertvalue</rotate-log>
我正在使用下面的 sed 命令。
sed -i 's#</rotate-log>#insertvalue</rotate-log>#2g' myfile.xml
以上命令无效。如果我删除 2g,则文本正在重新排列。我想跳过第一次出现。有什么帮助吗?
同样,当我 运行 第二次执行命令时,值又重新输入了。有没有办法只在不可用时检查和更换?
使用 GNU sed,您可以使用
sed -i '/<\/rotate-log>/{:A;n;s#</rotate-log># insertvalue</rotate-log>#;bA}' file
命令找到带有</rotate-log>
然后
的行
:A
- 设置标签 A
n
- 丢弃当前模式 space 值并将下一行读入其中
s#</rotate-log># insertvalue</rotate-log>#
- 将 </rotate-log>
替换为 # insertvalue</rotate-log>
bA
- 转到 A
标签(读取下一行,替换,继续)。
我正在尝试使用 sed 替换 xml 文件中的一些文本。我可以替换我的文本,但我想跳过第一次出现的内容。我正在使用 2g,但它不工作。没有错误显示,但文件没有变化。
我的 Xml 文件:
<file-min-size>10830</file-min-size>
<rotate-log>true</rotate-log>
<file-min-size>25600</file-min-size>
<rotate-log>true</rotate-log>
<file-min-size>32300</file-min-size>
<rotate-log>true</rotate-log>
<file-min-size>13456</file-min-size>
<rotate-log>true</rotate-log>
我的预期输出:
<file-min-size>10830</file-min-size>
<rotate-log>true</rotate-log>
<file-min-size>25600</file-min-size>
<rotate-log>true insertvalue</rotate-log>
<file-min-size>32300</file-min-size>
<rotate-log>true insertvalue</rotate-log>
<file-min-size>13456</file-min-size>
<rotate-log>true insertvalue</rotate-log>
我正在使用下面的 sed 命令。
sed -i 's#</rotate-log>#insertvalue</rotate-log>#2g' myfile.xml
以上命令无效。如果我删除 2g,则文本正在重新排列。我想跳过第一次出现。有什么帮助吗?
同样,当我 运行 第二次执行命令时,值又重新输入了。有没有办法只在不可用时检查和更换?
使用 GNU sed,您可以使用
sed -i '/<\/rotate-log>/{:A;n;s#</rotate-log># insertvalue</rotate-log>#;bA}' file
命令找到带有</rotate-log>
然后
:A
- 设置标签A
n
- 丢弃当前模式 space 值并将下一行读入其中s#</rotate-log># insertvalue</rotate-log>#
- 将</rotate-log>
替换为# insertvalue</rotate-log>
bA
- 转到A
标签(读取下一行,替换,继续)。