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

标签 regex bash macos sed bsd

我正在尝试创建一系列跨平台 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/

相关文章:

regex - 在 Eclipse 查找/替换字段中,我可以更改正则表达式匹配结果 $1 吗?

python - 在正则表达式后添加一个新行

javascript - Javascript 中德文和中文字符的正则表达式?

python - 在 python 中使用正则表达式替换 csv 中逗号的分号

linux - 如何处理后台 linux 任务的输出

php - 如何在 shell 中递归正则表达式重命名?

macos - fsevents-daemon 与 FSEvents API

linux - Grep:如果一行包含不需要的字符串,如何排除之前/之后的行?

xcode - 在 OSX 上安装 GLFW

mac 中的 C,关于来自处理程序的信号和标志在不同设备上循环不同的行为