[实践OK]vim/EditPlus/Sublime/Vscode/sed 删除空行的正则表达式(Windows)

jackxiang 2010-2-26 17:25 | |
零、linux使用grep删除空行:


一、Vscode和Sublime的 正则一样的,选中.*那个正则标识,然后输入:
^[ \t]*\n    #表示以空格或者\t制表符0次或者多次后并且还是以\n换行符结尾的这些内容给找出来

^[ \t]*\n    
^\s*\n       #输入时注意框里可能$前面有一个空格,导致无法匹配到空行。此问题经实践多次发现。
^\s*$\n    


Macbook上Vscode采用option+command+F,打开查找。

VS Code插件介绍(七)懒人插件-Hungry Delete & hungry-backspace,注意只是批量删除不要的空行:
Hungry Delete ,作者jasonlhy 目前下载量1000都不到。
Hungry-backspace,作者eklemen,目前下载量只有一点点。
这两个插件功能一样,绑定按键都有冲突,需要的同学,只要选其一安装就行了。
安装:
请搜索Hungray Delete或者hungry-backspace
配置:
两个插件都不需要配置
使用:
使用上两个略有区别。 除了直接按backspace按键自动清理空白区域之外,Hungry Delete多了一个Ctrl+backspace(Win/Linnux),Alt+Backspace(Mac)的功能。具体使用,大家可以自己玩下。


二、[实践OK]vim刪除空白行,刪除沒有內容的空行,刪除包含有空格組成的空行。
vim中:
:g/^[ \t]*\n/d  
和:
:%s/^[ \t]*\n//g  
的区别是?
答:
这两个 Vim 命令都涉及到删除空白行的操作,但使用了不同的命令和方法:
1. `:g/^[ \t]*\n/d`
   这个命令使用了全局(`g`)命令,对于匹配正则表达式 `^[ \t]*\n` 的每一行执行删除操作(`d`)。正则表达式的含义是以零个或多个空格或制表符(`[ \t]*`)开头,后面跟一个换行符(`\n`)。因此,这个命令会删除所有空白行。
2. `:%s/^[ \t]*\n//g`
   这个命令使用了替换(`%s`)命令,对于匹配正则表达式 `^[ \t]*\n` 的部分执行替换操作。替换为空字符串,表示将匹配的内容删除。正则表达式的含义与上面一样,匹配以零个或多个空格或制表符开头,后面跟一个换行符的内容。`%` 符号表示对整个文档执行替换操作,而 `g` 标志表示全局替换,会替换所有匹配。
总结区别:
- `:g/^[ \t]*\n/d` 使用了全局删除命令,逐行删除所有空白行。
- `:%s/^[ \t]*\n//g` 使用了全局替换命令,将匹配的内容替换为空字符串,实际上也是逐行删除所有空白行。
两者的效果是一样的,不同之处在于使用了不同的命令(删除 vs. 替换)。



刪除沒有內容的空行
g/^$/d

刪除包含有空格組成的空行
g/^\s*$/d

除以空格或tab開頭到結尾的空行
g/^[ |\t]*$/d


使用 global 命令删除空白行
Vim命令行模式下的 global 命令会在指定的范围内,标记所有匹配 pattern 的文本行,并对匹配的行上逐行执行 Ex 命令。
匹配空白行的正则表达式可以用 ^\s*$ 表示 ( ^ 表示行首, $ 表示行尾, \s 表示任何空白字符,包括空格、制表符、换页符等, * 表示匹配零次或多次)。
因此,使用 global 命令删除Vim打开文件中所有空白行的命令为 :g/^\s*$/d

三、删除file文件里所有#开头的行和空行并输出处理后的文本内容:



遇到一个比较大的文本文件需要去除空行,首先想到的自然是正则表达式。偷懒去网上找了几个删除空行的正则表达式,填到EditPlus里居然都不能用...而且大多数的正则表达式都用到了"\r",也就是回车符,关于"\n"和"\r"的区别我以后再写,今天只是为了记录一个正则表达式。

网上找的不行那就自己编吧,试验了几次最后写出一个能用的:

^[ \t]*\n


解释一下:
1、^表示一行的开头。空行嘛,肯定在一行的开头就是空的...

2、[ \t],"\t"前面还有一个空格。[]表示范围中的字符,里面写入空格和制表符(tab),因为空行可能是由空格和制表符构成。

3、*表示0次或任意次。也就是说这个空行可以没有空格或制表符,也可以有任意个前面[]里的字符。

4、\n就是换行符了。

这样在EditPlus里选择替换,然后勾选正则表达式,输入正则表达式,全部替换即可。不过EditPlus有个小bug,有时候不能一次替换完全,要多按几次"全部替换"才行...
最终写成:

^[ \t\n]*\n

好像这样就能一次全部删除了

方法二:
去掉所有的空行

搜索内容:\n\n
替换内容:\n

Ps:
<font size=2 >dfdfd</font>
可以通过正则表达式:

<font [^>]*>

匹配出来<font size=2 > ,Etc...

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/2731/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2023-8-12 23:48
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]