如何删除连续3个句点前后的所有空格

how to remove all whitespaces in front and beind 3 consecutive periods

我试图删除连续 3 个句点前后的所有空格,并将其替换为实际的椭圆符号。

我试过以下代码:

sed 's/[[:space:]]*\.\.\.[[:space:]]*/…/g'

将3个句点替换为椭圆符号,但前后空格保留。

示例输入。

hello    ...   world

期望的输出

hello…world

您使用的表达式是 ERE(扩展正则表达式)您必须按如下方式将 -E 选项添加到 sed 以允许它,因为您在您的字符中使用字符 类代码 [[:space:]].

sed -E 's/[[:space:]]*\.\.\.[[:space:]]*/.../g'   Input_file

没有 -E 尝试:

sed 's/ *\.\.\. */.../g'  Input_file

这是另一个sed

echo "hello    ...   world" | sed -E 's/ +(\.\.\.) +//g'
hello...world

4个点,什么都不做?

echo "hello    ....   world" | sed -E 's/ +(\.\.\.) +//g'
hello    ....   world

在bash中,只需使用参数替换...

foo="hello    ...    world"
foo="${foo//+( )...+( )/...}"

现在,echo "$foo",输出:

hello...world

BaSH正则表达式变量替换的语法如下:

${var-name/search/replace}

单个 / 仅替换左侧的第一个匹配项,而双 // 替换所有匹配项。

其中一个 ?*+@! 后跟 (pattern-list) 替换 pattern-list 中出现指定次数的模式,如下所示:

? Zero or one occurrence
* Zero or more occurrences
+ One or more occurrences
@ A single occurence
! Anything that *doesn't* match one of the occurrences

模式列表可以是文字串的任意组合,也可以是字符类,由竖线字符|

分隔