简单任务 1 - 合并连续的空行

简单任务 - 将多个连续的空行合并成一个空行。来自一个实际问题:打印一个很长的 RFC 文档,希望能省一些纸张。

很久以前就遇到过这个问题,因为发现 sed 不能匹配 '\n',当时的解法是写了个 shell 脚本处理。Vim 可以用 '\n' 匹配换行符,解决方案是:

vim '+%s/^\n\+/\r/g' +x rfc.txt

考虑空行上可以有空白字符的话,还能再完善一点:

vim '+%s/^\(\s*\n\)\+/\r/g' +x rfc.txt

这是目前的“最佳应法”,欢迎提供更佳的解法。

特别鸣谢:刚开始缺少 '^' 怎么都不能成功,经老婆指正方才解决。你怎么也想不到,我老婆作为一个文科生,竟然能把 vim 使得出神入化,还在她们公司内部做了一个四十分钟的讲座!

3 Comments so far

  1. gavinzhm, on Jan 8, 2009 at 8:11am, said:

    试试这个行不
    sed '/^$/{N;/^\n*$/D}' ufile

  2. mattw, on Jan 9, 2009 at 10:33pm, said:

    受教了,居然加上 $ 就可以匹配到 \n 了。

  3. mattw, on Jan 23, 2009 at 7:16am, said:

    仔细读了手册,总算理解了这个命令。

    sed '/^$/{N;/^\n$/D}' inputfile

    即可,\n 后的星号不必要,因为 D 命令应用之后会将控制转到脚本开头(接着 N)。

Leave a Comment?


« 用 iMacros 成功约到周末练车  —  简单任务 2 - 计算并替换 »

Tags

Blogroll

Fairy World | STUPiD | 阅微草堂 | ShelleX | 流浪五天