如何将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更改限制为第一组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果使用 useEffect 更改了另一个过滤器,则重置为第一页

如何更改 DataFrame 列的顺序?

如何更改 DataFrame 列的顺序?

如何更改 DataFrame 列的顺序?

如何更改 DataFrame 列的顺序?

如何更改 DataFrame 列的顺序?