我试图使用此代码
sed "s/\!{2,}/\!/g" "s/\?{2,}/\?/g" "s/\.{2,}/\./g" file.txt
它几乎可以工作,但它不能取代点
- 输入就像
您好!!!你好吗?? .....
- 输出应为
您好!你好吗?。
答案 0 :(得分:2)
$ echo "Hello!!! How are you?? ....." | sed -r 's/\.+/./g; s/\?+/?/g; s/!+/!/g'
Hello! How are you? .
答案 1 :(得分:1)
在花括号{和}
之前添加反斜杠sed使用posix基本正则表达式,其语法在括号之前需要反斜杠(并对括号进行分组)以赋予它们特殊含义。 否则它匹配文字字符{和}
echo -n foo | sed -e 's/o\{2,\}/o/g'
答案 2 :(得分:0)
我的答案可能有点"关闭标签",使用tr似乎是这里最短的路线
tr -s '?.!'
将tr与文件一起使用
tr -s '?.!' < '/root/Desktop/test'
echo
的示例echo 'hello!!! my name is John...how are you??'| tr -s '?.!'
输出
hello! my name is John.how are you?
答案 3 :(得分:0)
# posix
sed 's/\([.?!]\)\1\{1,\}/\1/g' file.txt
# GNU
sed 's/\([.?!]\)\1+/\1/g' file.txt
可以同时使用class for 1 action