Regex 如何围绕以开头的文本!直到sed中带有转义字符的行结束?

Regex 如何围绕以开头的文本!直到sed中带有转义字符的行结束?,regex,sed,freebsd,Regex,Sed,Freebsd,我想: 以字母开头的前缀文本!ESC E为ESC八进制代码的行中的字符\033 在文本上方添加后缀,并在行尾添加ESC F。 这就是我尝试过的: sed $'s/\(!.*\)/\033E\1\033F/' 这是我得到的错误: $ echo "test line ! This part shall be enclosed with ESC commands" | sed $'s/\(!.*\)/\033E\1\033F/' sh: Syntax error: Bad

我想:

以字母开头的前缀文本!ESC E为ESC八进制代码的行中的字符\033 在文本上方添加后缀,并在行尾添加ESC F。 这就是我尝试过的:

sed $'s/\(!.*\)/\033E\1\033F/'
这是我得到的错误:

$ echo "test line     ! This part shall be enclosed with ESC commands" | sed $'s/\(!.*\)/\033E\1\033F/'
sh: Syntax error: Bad escape sequence
如果我删除$符号,可以看到文本被检测到并包含在内,但sed无法插入ESC字符

$ echo "test line     ! This part shall be enclosed with ESC commands" | sed 's/\(!.*\)/\033E\1\033F/'
test line     033E! This part shall be enclosed with ESC commands033F
我使用的是FreeBSD 12 sed,根据手册页,它有望成为IEEE Std 1003.2 POSIC.2规范的超集。

仅对所需部分应用$“..”:

$s='测试线!该部分应包含ESC命令' $echo$s|sed's/\!.\/'$'\033E\1'$'\033F/'|第五类 测试线^[E!该部分应包含ESC命令^[F 不确定其他版本,但在GNU-sed上,可以使用十六进制和八进制。注意,o直接转义,因此可以执行以下操作:

$echo$s | sed's/\!.\/\x1BE\1\x1BF/'| cat-v 测试线^[E!该部分应包含ESC命令^[F $echo$s | sed's/\!.\/\o033E\1\o033F/'|第五类 测试线^[E!该部分应包含ESC命令^[F 仅对所需部分应用$'..:

$s='test line!此部件应包含ESC命令' $echo$s | sed's/\!.\/'$'\033E\1'$'\033F/'|第五类 测试线^[E!该部分应包含ESC命令^[F 不确定其他版本,但在GNU-sed上,可以使用十六进制和八进制。注意,o直接转义,因此可以执行以下操作:

$echo$s | sed's/\!.\/\x1BE\1\x1BF/'| cat-v 测试线^[E!该部分应包含ESC命令^[F $echo$s | sed's/\!.\/\o033E\1\o033F/'|第五类 测试线^[E!该部分应包含ESC命令^[F