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

时间:2015-02-09 20:07:04

标签: linux unix replace sed terminal

我试图使用此代码

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

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

- 输入就像

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

- 输出应为

您好!你好吗?。

4 个答案:

答案 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