gpt4 book ai didi

regex - 仅当匹配 X 时,才使用 sed 从字符串中删除前 N 个和最后 N 个字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:52 25 4
gpt4 key购买 nike

我想使用 sed 删除每个字符串中特定符号的前 N ​​次出现和最后 N 次出现。例如,我想从下面的字符串中删除第一个和最后一个方括号。嵌套括号的数量未知,可能是

[{string[substring]string}]

[[[{string[substring]string}]]]

sed 结束后

{string[substring]string}

我尝试遵循 replace up to nth match 的逻辑和 How to remove the last character from all lines but only if it is a certain character但找不到适用于未知数量的嵌套括号的公式。

最坏的情况是我可以递归地测试字符串以获得嵌套括号的数量,然后删除该数量的字符。那会是更好的方法吗?公式会是什么样子?我尝试了 sed -r 's/.{2}//' -e 's/.{2}$//' 但没有成功

谢谢艺术

最佳答案

你不必数括号,你只需要使用正确的模式。你可以这样做:

sed "s/^\[*{/{/;s/}\]*$/}/"

这里replace有两种模式,s表示将/之前的内容替换为之后的内容:

s/^\[*{/{/

这将寻找 { 与任意数量的 [ 从字符串的开头开始。 ^ - 表示字符串的开头,* 表示任何内容,使用 \ 我们转义 [。所以我们在这里将 ^\[*{ 替换为 {

s/}\]*$/}/

反之亦然,但我们寻找 } 和任意数量的 ] 直到字符串的末尾。 $ 表示结束。我们将此处的 }\]*$ 替换为 }

关于regex - 仅当匹配 X 时,才使用 sed 从字符串中删除前 N 个和最后 N 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27305598/

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