当前位置:Linux教程 - Shell - shell - 正则表达式

shell - 正则表达式

正则表达式
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

:v/./$s/$/<ctrl-v><enter>./|'';/./-1j|$d
Replaces multiple blank lines with just one blank line.

大家看看,试着解释一下

我试了几次,都没有好用,命令的意思好像是把空行(不包括空格,TAB..行)删除掉,
用g/^$/ d 应该就可以。

:v/./$s/$/<ctrl-v><enter>./|'';/./-1j|$d
可以分解为:
1 :v/./$s/$/<ctrl-v><enter>./
意思是把所有空行选出来并且到最后一行然后添加N个行,N为查找到的空行数
2 | 命令的意思为循环执行
3 '' 跳转到上一次位置
4 ;/./ 查找到下一个非空行
5 -1j 合并一行
6 $d 把最后一行删除
总之我感觉此条命令太复杂,而太复杂的东西最好使用VIM中的宏记录,记录操作后,再重复执行,应该比这个好明白。



:v
怎么使用?

help :v如下:
:[range]g[lobal]/{pattern}/[cmd]
Execute the Ex command [cmd] (default ":p") on the
lines within [range] where {pattern} matches.

:[range]g[lobal]!/{pattern}/[cmd]
Execute the Ex command [cmd] (default ":p") on the
lines within [range] where {pattern} does NOT match.

*:v* *:vglobal*
:[range]v[global]/{pattern}/[cmd]
Same as :g!.

是的,要达与楼主同样效果,其实完全可以用简短得多的命令,

:g/^$/,/./-j

就行了。

甚至,只要用

cat -s

就行了

我在 vi 下面试试,能成。在 vim 下面就不稳定,有时行有时不行。