当前位置: 技术问答>linux和unix
请问AWK或VI如何将源文件中的连续空行变成一个?谢谢了!
来源: 互联网 发布时间:2016-04-24
本文导语: 源文件如下 aaaaaaaaaaaaaaaaaaaaaaa (不连续空行,不能删除) aaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaa (两行连续,消除一行) aaaaaaaaaaaaaaaaaaaaaaa (三行连续,消除两行) aaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaa ... 谢谢前辈们了!...
源文件如下
aaaaaaaaaaaaaaaaaaaaaaa
(不连续空行,不能删除)
aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaa
(两行连续,消除一行)
aaaaaaaaaaaaaaaaaaaaaaa
(三行连续,消除两行)
aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaa
...
谢谢前辈们了!!!
aaaaaaaaaaaaaaaaaaaaaaa
(不连续空行,不能删除)
aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaa
(两行连续,消除一行)
aaaaaaaaaaaaaaaaaaaaaaa
(三行连续,消除两行)
aaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaa
...
谢谢前辈们了!!!
|
可以用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]
|
:%s 全局替换
nn 回车 2个
/,/ 替换为 ,
g 全局
nn 回车 2个
/,/ 替换为 ,
g 全局
|
搬板凳,搞学习
|
可以这样
sed '/^s*$/{n;/^s*$/d}' a.txt > b.txt;
不过这样一次只能删除连续几个空行中的偶数空行,你需要多次运行这个命令才可以把很多连续空行的情况合并成一个空行。
sed '/^s*$/{n;/^s*$/d}' a.txt > b.txt;
不过这样一次只能删除连续几个空行中的偶数空行,你需要多次运行这个命令才可以把很多连续空行的情况合并成一个空行。
|
其实LS joyself兄弟的办法挺好的,如果你硬要自己做下,那么试下如下命令也许(但不一定)可以满足你的要求:
cat yourfile.c | awk '{if ($0!=line) print;line=$0}'
or
cat yourfile.c | uniq
上面这2条语句对连续重复的其它行(非空格行)也会删除只留一行!
good luck!
cat yourfile.c | awk '{if ($0!=line) print;line=$0}'
or
cat yourfile.c | uniq
上面这2条语句对连续重复的其它行(非空格行)也会删除只留一行!
good luck!
|
可以搜索多个连续 n
替换成一个
替换成一个
|
.
|
看上去不是很好办,如果删除全部空白行的话可以用
g/^s*$/d
g/^s*$/d
|
:%s/nn/,/g
|
错了,是替换为两个