在 Linux 中用 sed 替换点、感叹号和问号

Replace dot, exclamation and ask sign with sed in Linux

我正在尝试使用此代码

sed "s/\!{2,}/\!/g" "s/\?{2,}/\?/g" "s/\.{2,}/\./g" file.txt

它几乎可以工作,但它不能取代圆点

-输入就像

您好!!!你好吗?? .....

-输出应该是

您好!你好吗?

在大括号 { 和 } 前添加反斜杠

sed 使用 posix 基本正则表达式,其语法要求在大括号(和分组圆括号)前加一个反斜杠以赋予它们特殊的含义。 否则它匹配文字字符 { 和 }

echo -n foo | sed -e 's/o\{2,\}/o/g'
$ echo "Hello!!! How are you?? ....." | sed -r 's/\.+/./g; s/\?+/?/g; s/!+/!/g'
Hello! How are you? .

我的回答可能有点"off tag",这里用tr好像是最短路线

tr -s '?.!'

对文件使用 tr

 tr -s '?.!' < '/root/Desktop/test'

回声示例

echo 'hello!!! my name is John...how are you??'| tr -s '?.!'

输出

hello! my name is John.how are you?
# posix
sed 's/\([.?!]\)\{1,\}//g' file.txt
# GNU
sed 's/\([.?!]\)+//g' file.txt

一次性使用 class 进行 1 次操作