在sed中使用反向引用正则表达式

时间:2010-08-26 10:40:38

标签: regex unix sed ksh aix

我想删除一个包含单个字符的文件中的多个空格。 实施例

cat      kill    rat
dog      kill    cat

我使用了以下正则表达式,它似乎在http://www.regexpal.com/中匹配但在sed中不起作用。

([^ ])*([ ])*

我像这样使用了sed命令:

sed s/\(\[\^\ \]\)*\(\[\ \]\)*/\$1\|/g < inputfile

我希望,

cat|kill|rat
dog|kill|cat

但我无法让它发挥作用。任何帮助将非常感激。感谢。

编辑: 请注意,猫/狗可能是任何字符,而不是空白。

4 个答案:

答案 0 :(得分:5)

sed反向引用反斜杠,因此请使用\ 1而不是$ 1。 用引号括起你的表达式:

sed 's/match/replace/g' < inputfile

Manpages是Linux世界中最好的发明:man sed

注意*,它实际上可以匹配NOTHING。 如果要用“|”替换多个空格,请使用此RE:

sed -r 's/ +/\|/g'

来自man sed

-r, --regexp-extended
   use extended regular expressions in the script.

如果您只想替换所有空格,则不需要任何反向引用。 如果您想匹配标签,请将(空格)替换为\s

答案 1 :(得分:1)

我知道OP想要用sed而且这个问题已经过时了,但是tr -s'输入怎么样?

答案 2 :(得分:0)

怎么样:

s/\s+/\|/g

答案 3 :(得分:0)

您可以使用:

sed -e's / [[:blank:]] / \ | / g'&lt; inputfile中

whete [:blank:]是空格和制表符