如何将sed更改限制为第一组[重复]
Posted
技术标签:
【中文标题】如何将sed更改限制为第一组[重复]【英文标题】:How to limit sed change to first set [duplicate] 【发布时间】:2016-10-17 02:37:17 【问题描述】:我有一个包含以下条目的文本文件。
标签1开始 文本1 文本2 文本3 文本4 标记1结束 .. .. 标签1开始 文本5 文本6 文本7 文本8 标记1结束我只需要更改 first 组 tag1start tag1end
中的条目我曾尝试使用“范围”,但它会影响两个集合。如何将其限制在第一组?
/tag1start/,/tag1end/c\ 其他一些文本1\ 其他一些文本2\ 其他一些文本3\ 其他一些文本4\ 其他一些文本5\ 其他一些文本6\ 标记1结束【问题讨论】:
可能相关 - ***.com/q/148451/352349 【参考方案1】:sed '/tag1end/,$!1,/tag1start/!s/\(.*\)/Some other \1\\/;'
粗略翻译:在所有 except 中,从 tag1end 到最后一行的部分(因为贪心,就是第一个 tag1end 之后的所有内容),请执行以下操作:在所有 except em> 第1行到tag1start的部分,把foo
变成Some other foo\
。
【讨论】:
【参考方案2】:考虑:
$ sed '/tag1end/,$p;d; /tag1start/,/tag1end/s/^/Some other /' file
Some other tag1start
Some other text1
Some other text2
Some other text3
Some other text4
tag1end
..
..
tag1start
text5
text6
text7
text8
tag1end
工作原理
/tag1end/,$p;d
对于从匹配tag1end
的第一行到结尾$
范围内的所有行,按原样打印该行(p
)并从下一行(d
)重新开始。
/tag1start/,/tag1end/s/^/Some other /
如果我们还没有到达第一个tag1end
,我们只会得到这个命令。如果我们还没有达到tag1end
并且我们在/tag1start/,/tag1end/
范围内,那么将执行大括号中的命令。您可以将任何您喜欢的sed
命令放在这些大括号中。
【讨论】:
以上是关于如何将sed更改限制为第一组[重复]的主要内容,如果未能解决你的问题,请参考以下文章