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

jgu*_*ua1 4 regex unix aix ksh sed

我想删除文件中带有单个字符的多个空格.例

cat      kill    rat
dog      kill    cat
Run Code Online (Sandbox Code Playgroud)

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

([^ ])*([ ])*
Run Code Online (Sandbox Code Playgroud)

我像这样使用了sed命令:

sed s/\(\[\^\ \]\)*\(\[\ \]\)*/\$1\|/g < inputfile
Run Code Online (Sandbox Code Playgroud)

我预计,

cat|kill|rat
dog|kill|cat
Run Code Online (Sandbox Code Playgroud)

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

编辑:请注意猫/狗可以是任何字符而不是空格.

Lek*_*eyn 5

sed反向引用反斜杠,所以使用\ 1代替$ 1.用引号括住你的表达式:

sed 's/match/replace/g' < inputfile
Run Code Online (Sandbox Code Playgroud)

联机帮助页是Linux世界中最好的发明: man sed

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

sed -r 's/ +/\|/g'
Run Code Online (Sandbox Code Playgroud)

来自man sed:

-r, --regexp-extended
   use extended regular expressions in the script.
Run Code Online (Sandbox Code Playgroud)

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