sed 模式分隔符

到目前为止,我们只使用过一种 分隔符,那就是 反斜杠(/

假设我们需要使用 sed 将输入源中的 /bin/sed 替换为 /home/yufei/bin/sed

因为 / 是模式分隔符,我们不得不对它进行转义,即 \/

[www.twle.cn]$ echo "/bin/sed" | sed 's/\/bin\/sed/\/home\/yufei\/bin\/sed/'

运行结果如下

/home/yufei/bin/sed

结果看起来是正确的。但是整个 sed 命令看起来就有点难以阅读了。更何况一个不小心,就会把替换的命令写错。

当我看到

s/\/bin\/sed/\/home\/yufei\/bin\/sed/

我头皮都麻了。

这,这,这...

难道没有其它的分隔符了吗?

估计 sed 的开发人员也遇到了这个问题吧。

其实 sed 允许使用其它的分隔符的,比如

  • 竖线(|
  • at 符号 (@
  • 反引号(`)
  • 感叹号(!

本章接下来的内容,我们就来简单介绍下这几种分隔符的用法

竖线 |

竖线(| 应该是 反斜杠(/ 之外用的最多的分隔符了。

竖线能够显著改善 sed 模式语句的可读性。

例如上面的命令,我们使用竖线作为分隔符,则可重写为

[www.twle.cn]$ echo "/bin/sed" | sed 's|/bin/sed|/home/yufei/bin/sed|'

运行结果如下

/home/yufei/bin/sed

@ 字符

@ 字符同样也可以作为分隔符,不过可读性就没有竖线那么高了。

[www.twle.cn]$ echo "/bin/sed" | sed 's@/bin/sed@/home/yufei/bin/sed@'

运行结果如下

/home/yufei/bin/sed

看到 s@sed@ ,这 TMD 是什么鬼啊,我个人感觉可读性变差了好多。

/home/jerry/src/sed/sed-4.2.2/sed

反引号(`)

反引号(`)同样可以作为分隔符,不过可读性差了些

[www.twle.cn]$ echo "/bin/sed" | sed 's^/bin/sed^/home/yufei/bin/sed^'

运行结果如下

/home/yufei/bin/sed

看到 反引号(`),我们第一个想到的是什么?

对,就是正则表达式中的 匹配行首

因此,可读性和可理解性那就更差了。

个人觉得最差,没有之一。

感叹号 !

感叹号(! 同样可以作为分隔符。可读性和可理解性都是差到了极点了。

[www.twle.cn]$ echo "/bin/sed" | sed 's!/bin/sed!/home/yufei/bin/sed!'

运行结果如下

/home/yufei/bin/sed

看到 感叹号(!,你第一个想法是什么? 这不就是 条件测试 中的 取反 么?

这个可读性和理解性,可以和 反引号(`) 有的一拼了。

结论

sed 除了支持 反斜杠(/ 这一种分隔符,还支持其它的分隔符。

但我们最推荐的,还是 竖线(|

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.