加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – OSX sed:如何在`s`操作的第二个字段中使用转义字符?

发布时间:2020-12-14 02:09:41 所属栏目:Linux 来源:网络整理
导读:在OSX上: bash-3.2$echo "abc" | sed 's/b/x1b[31mzx1b[m/'ax1b[31mzx1b[mc 而在Linux上: $echo "abc" | sed 's/b/x1b[31mzx1b[m/'azc 并且z正确显示红色. 这是bash 3.2的限制吗?我的Linux测试在这里运行bash 4.1.2. 奇怪的是在我的Linux环境中工作时
在OSX上:

bash-3.2$echo "abc" | sed 's/b/x1b[31mzx1b[m/'
ax1b[31mzx1b[mc

而在Linux上:

$echo "abc" | sed 's/b/x1b[31mzx1b[m/'
azc

并且z正确显示红色.

这是bash 3.2的限制吗?我的Linux测试在这里运行bash 4.1.2.

奇怪的是在我的Linux环境中工作时bash是3.2以下的版本,它也适用于那里.

此外,这可能是相关的,但可能不是:

bash-3.2$echo "abc" | sed 's/b/^[[31mz^[[m/'
31mz$'m/'azc

再次,具体到BSD sed.这是非常令人费解的:似乎有些事情导致shell或sed以某种方式将命令的一些错位部分回应到终端?但是,它总是在命令的正确输出之前.那个美元符号来自哪里?

(不要被我的命令中的颜色混淆(在青色unicode字符看起来像一个不太弯曲的>这是我的提示之后),我使用语法高亮显示zsh)

解决方法

OS X的sed版本不会执行您要求的转义替换.你可以通过使用$’…’来解决这个问题,让bash在将字符串传递给sed之前进行替换:

$echo "abc" | sed 's/b/x1b[31mzx1b[m/'
ax1b[31mzx1b[mc
$echo "abc" | sed $'s/b/x1b[31mzx1b[m/'
azc

(你必须相信我,“z”在第二个中是红色的.)但请注意,这可能需要在某些情况下你可能需要双重逃避你想要的事情来进行转义替换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读