gpt4 book ai didi

regex - 在两种情况下 SED 在 MacOS 上失败 : invalid repetition count(s) and bad flag in substitute command

转载 作者:行者123 更新时间:2023-11-29 09:32:28 26 4
gpt4 key购买 nike

我正在尝试创建一系列跨平台 SED 替代品(Linux 和 MacOS)。对于下面的两个 SED 命令,我在 MacOS 上收到两个错误,这两个命令在 Linux 中的 bash 下工作正常。我需要更改什么才能让它们在 BSD 风格的 SED 下被接受?

注意:在下面的每个命令中,$sed_regex_sym 替换为 Linux 的 -r 和 macOS 的 -E。

sed -$sed_regex_sym "/.*[*]/!{/.*[|]{1}/s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]([_|\\\/])\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]/\3/g}"

sed -$sed_regex_sym "/^([[:space:]_|\\\/]{0,$N_HASH_CHARS})[A-Z][[:space:]]/s/([A-Z][[:space:]].{1,${N_STAT_CHARS_TO_KEEP}}).*/$(printf "%${N_STAT_INDENT_CHARS}s" " ")\1/"

对于上面的两个命令,我分别得到以下两个错误:

sed: 1: "/.*[*]/!{/.*[|]{1}/s/\x ...": bad flag in substitute command: '}'

sed: 1: "/^([[:space:]_|\\/]{0, ...": RE error: invalid repetition count(s)

对于后一个替换,我确实尝试像我在另一篇文章中看到的那样转义匹配组的括号,但这并没有解决无效重复计数错误。

更新 12/01/2018:我确定了上述问题的根源。以相反的顺序进行:

1) 后一个替换实际上不是 sed 问题,而是我脚本中执行 wc(字数)以确定 N_HASH_CHARS 的前一行仅在 macOS 上以前面的空格结尾。修剪空格解决了上面第二个 sed 命令的问题

2) 上面的第一个sed 语句实际上是BSD sed 和Linux sed 之间的兼容性问题。我在 stackoverflow 的其他地方发现 BSD 中使用 { } 的嵌入式函数列表需要让内部函数列表以 ;
结尾放一个;在全局替换的 g 解决了这个问题并且适用于 Linux 和 macOS 之后

最佳答案

从我上面的更新中复制了答案。

我确定了上述问题的根源。以相反的顺序进行:1) 后一个替换实际上不是 sed 问题,而是我脚本中执行 wc (字数)以确定 N_HASH_CHARS 的前一行仅在 macOS 上以前面的空格结尾。修剪空格解决了上面第二个 sed 命令的问题2)上面第一个sed语句其实是BSD sed和Linux sed的兼容性问题。我在 stackoverflow 的其他地方发现,BSD 中使用 { } 的嵌入式函数列表需要让内部函数列表以 ; 结尾。放一个;在全局替换的 g 解决了这个问题并且适用于 Linux 和 macOS 之后

关于regex - 在两种情况下 SED 在 MacOS 上失败 : invalid repetition count(s) and bad flag in substitute command,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53419829/

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