2

朋友、同事、油嘴滑舌的知情人,以及受人尊敬的《最屈辱的职业》的受害者,

当尝试在 Max OSX 中做简单的 UNIXy 事情时,我正遭受着一种独特的疲劳。有人能告诉我如何使用 sed(不是 awk,不是 perl,除了 sed 以外的任何东西)来获取包含以下内容的 file.txt:

Oh         my I         have Mac                 fatigue

让它看起来像这样:

Oh my I have Mac fatigue

如果您真的在 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

告诉我在 linux 机器上使用 sed 会让我微笑,但不会得到支持 :) 在此先感谢。不知道如果没有 StackOverflow 我会做什么。

4

1 回答 1

5

这有效(在股票 OS X 10.8.3 上测试):

 cat file.txt | sed -e "s/  */ /g"

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

或摆脱cat 的无用使用

 sed -e "s/  */ /g" < file.txt
于 2013-04-04T22:20:37.440 回答