在Mac OSX Lion中,如何使用sed用单个空格替换多个空格?

noo*_*rub 2 macos sed osx-lion

朋友,同事,狡猾的知情人士,以及受人尊敬的职业羞辱受害者,

当我在Max OSX中尝试执行简单的UNIX操作时,我会遇到这种独特的疲劳.有人可以告诉我如何使用sed(不是awk,不是perl,除了sed之外的任何东西)来获取包含以下内容的file.txt:

Oh         my I         have Mac                 fatigue
Run Code Online (Sandbox Code Playgroud)

并使它看起来像这样:

Oh my I have Mac fatigue
Run Code Online (Sandbox Code Playgroud)

非常感谢你在Mac OSX Lion中实际执行此操作.(编辑:不是Mountain Lion,不同的操作系统).我只是花了很长时间谷歌搜索一般回答Linux或UNIX的人们,遗憾的是没有多少帮助.

我从标准模式匹配的幸福,长期被遗忘的日子里尝试了很多东西,当一个人可以滔滔不绝地说出UNIXy的命令时!他们会表现得:

cat file.txt | sed 's/ */ /g'        - O h m y I h a v e M a c f a t i g u e
cat file.txt | sed 's/ \+/ /g'       - no effect
cat file.txt | sed 's/\s\+/ /g'      - no effect
cat file.txt | sed -E -e 's/ */ /g'  - O h m y I h a v e M a c f a t i g u e
Run Code Online (Sandbox Code Playgroud)

告诉我在linux机器上使用sed会让我微笑,但它不会得到一个upvote :)在此先感谢.不知道没有StackOverflow我会做什么.

Pau*_*l R 5

这有效(在现货OS X 10.8.3上测试):

 cat file.txt | sed -e "s/  */ /g"
Run Code Online (Sandbox Code Playgroud)

(注意星号前有两个空格)

或者摆脱无用使用:

 sed -e "s/  */ /g" < file.txt
Run Code Online (Sandbox Code Playgroud)

  • 你也可以使用`sed -e'/\{1,\}// g'`或`sed -Ee's/+// g'`(`-E`切换到扩展正则表达式格式,允许`+`运算符). (2认同)