请问AWK或VI如何将源文件中的连续空行变成一个?谢谢了!

mage1982 2008-11-05 03:40:43
源文件如下


aaaaaaaaaaaaaaaaaaaaaaa
(不连续空行,不能删除)
aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaa
(两行连续,消除一行)

aaaaaaaaaaaaaaaaaaaaaaa
(三行连续,消除两行)


aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaa
...

谢谢前辈们了!!!
...全文
181 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐田伯光 2008-11-12
  • 打赏
  • 举报
回复
可以这样
sed '/^\s*$/{n;/^\s*$/d}' a.txt > b.txt;
不过这样一次只能删除连续几个空行中的偶数空行,你需要多次运行这个命令才可以把很多连续空行的情况合并成一个空行。
once_and_again 2008-11-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhoujianhei 的回复:]
:%s/\n\n/,/g


[/Quote]:%s 全局替换
\n\n 回车 2个
/,/ 替换为 ,
g 全局
once_and_again 2008-11-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 guoli0813 的回复:]
搬板凳,搞学习
[/Quote].
bshawk 2008-11-06
  • 打赏
  • 举报
回复
其实LS joyself兄弟的办法挺好的,如果你硬要自己做下,那么试下如下命令也许(但不一定)可以满足你的要求:

cat yourfile.c | awk '{if ($0!=line) print;line=$0}'
or
cat yourfile.c | uniq

上面这2条语句对连续重复的其它行(非空格行)也会删除只留一行!

good luck!
快乐田伯光 2008-11-06
  • 打赏
  • 举报
回复
看上去不是很好办,如果删除全部空白行的话可以用
g/^\s*$/d
guoli0813 2008-11-05
  • 打赏
  • 举报
回复
搬板凳,搞学习
joyself 2008-11-05
  • 打赏
  • 举报
回复

可以用Lindent,内核代码里有。
他是调用indent的。所以只要你的机子上有indent即可。

用法很简单:
Lindent file

结果:新文件仍为file,原文件为file~

[code=BatchFile]
[rob@lx4 linux-2.6]$ cat ./scripts/Lindent
#!/bin/sh
PARAM="-npro -kr -i8 -ts8 -sob -l80 -ss -ncs -cp1"
RES=`indent --version`
V1=`echo $RES | cut -d' ' -f3 | cut -d'.' -f1`
V2=`echo $RES | cut -d' ' -f3 | cut -d'.' -f2`
V3=`echo $RES | cut -d' ' -f3 | cut -d'.' -f3`
if [ $V1 -gt 2 ]; then
PARAM="$PARAM -il0"
elif [ $V1 -eq 2 ]; then
if [ $V2 -gt 2 ]; then
PARAM="$PARAM -il0";
elif [ $V2 -eq 2 ]; then
if [ $V3 -ge 10 ]; then
PARAM="$PARAM -il0"
fi
fi
fi
indent $PARAM "$@"

[/code]
zhoujianhei 2008-11-05
  • 打赏
  • 举报
回复
:%s/\n\n/,/g

fox000002 2008-11-05
  • 打赏
  • 举报
回复
错了,是替换为两个
fox000002 2008-11-05
  • 打赏
  • 举报
回复
可以搜索多个连续 \n

替换成一个

19,619

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧