shell sed替换命令在[ ]* [duplicate]处无法理解

g2ieeal7  于 2022-12-30  发布在  Shell
关注(0)|答案(1)|浏览(152)
    • 此问题在此处已有答案**:

Reference - What does this regex mean?(1个答案)
昨天关门了。
我正在尝试理解其中一个bash脚本。我在sed命令下面登陆,据我所知,sed用第二个集合替换第一个集合,但是我在[]* 处感到困惑,你能告诉我它是做什么的吗?
完成命令。

sed 's/[ ]*|||[ ] */|||/g'

我已通过获取样本文件执行命令,无论它在何处看到3个管道,它都将再次替换为|||管子。
如果是这样的话,我无法理解命令,为什么我们要替换相同的字符

7tofc5zh

7tofc5zh1#

[ ]*部分是一个字符类(也可以写成*,不带方括号),匹配可选空格,在本例中匹配3个管道的左边和右边。
然后仅将其替换为3个管道,而不替换周围的空间。

echo "test ||| and ||||| and   | || ||| " | sed 's/[ ]*|||[ ]*/|||/g'

输出(在macOs 13.1和Ubuntu GNU sed 4.8上测试)

test|||and||||| and   | |||||

相关问题