grep的小技巧
grep '^[^#]' /etc/openvpn/server.conf
中括号必须匹配一个字符^$属于标志位,不属于字符
grep没把\n看成字符
grep把空行看成^$
还是perl的标准,空行看成^\n$
--------------------------------------------------------------------------------
^ 和 $ 表示位置,不占字符数,
^[^#]里的[^#]代表一个非'#'的字符(排除空行,因为空行没有字符存在),加上前面的'^',表示这个非'#'的字符必须在行首(排除注释行)
--------------------------------------------------------------------------------
关键应该是在于sed、grep等流编辑工具对行结尾符的理解,它们认为记录行尾的"$"就是标记新行的开始,不认为它在正则表达式的字符匹配范围内
换句话所就是sed、grep等不将换行符作为常规字符对待,仅视为文档标记,类似于C语言中会有文件结束符"EOF".
现在一些较高版本的sed、awk对字符串内嵌的换行符也是支持的,但无一例外的,对它们所定义分隔出的记录而言,必须有一个被视作记录结束的标记符,不是自定义的就是默认的"$"
这些被当做记录结束的标记字符如果出现在记录结尾它将被特殊对待.
明白这点后,对于"^[^#]"匹配不到空行也就好理解了,因为空行中没有可匹配的字符,仅仅有一个行位置标记符而已.
"#"的补集字符中不包含位置标记,所以问题可这样解决:
grep -nE '^[^#]*$'
注: "^[^#]*" 用来匹配非"#"开头但含字符的行
"^$" 用来匹配空行位置
这里不要从“过滤”的角度去理解。
要理解为“找出”。
grep -n "^[^#]" file ##找出非“#”(一个字符)开头的行。
以下为比喻,不是真实命令:
$cat room
一个姓张的人
一台电视
一个姓王的人
$ find '一个不是姓王的人' room ##find找出:如果有人叫你在房间里找一个不姓王的人,你必然会将姓张的那个人找出来,但不会将电视记也找出来。
一个姓张的人 #重点在一个'人' 类比找出含有#;的"字符"
$ disappear '一个不是姓王的人' room ##disappear消失:让“一个不是姓王的人”的人从房间里消失。那么姓张的人必然要消失的,但是“一台电视”该不该消失?
一台电视 ##是消失呢还是不消失?我的理解是不消失,正如楼主从“过滤”的角度理解grep -n "^[^#]" 因该不会过滤掉空行。
一个姓王的人
如上:
一个姓某某的人,相当于一某个普通字符
“一台电视” 相当于空行
grep的小技巧的更多相关文章
- grep的用法,小技巧,模板中含有\t时:grep -P "^\t" file
linux中grep和find的用法区别 本文章详细的介绍了关于在linux中的grep和find两个命令的用法介绍,以及后面总结了它们两年用法区别哦. 先我们来介绍一下关于grep用法和一些小注意事 ...
- iOS工作小技巧及填坑记录
以下是本人在iOS开发工作中使用的一些小技巧,记录一下. 1.使用XXX.pch文件便捷开发+加速Build 在IOS开发的项目中有一个XX_Prefix.pch XX_Prefix.pch:扩展名. ...
- Linux的95个小技巧
Linux的95个小技巧 by WEB全栈工程师 on 2012 年 03 月 27 日 这里总结了Linux使用中的一些小技巧 1.实现RedHat非正常关机的自动磁盘修复 先登录到服务器,然后在/ ...
- Shell 小技巧
Shell 小技巧 ${} 的使用 截断变量 去掉左边 使用 # (最短匹配)或 ## (最长匹配)方法为 ${var#<模式>} var=DUMMY echo ${var#*M} # M ...
- gdb调试运行时的程序小技巧
使用gdb调试运行时的程序小技巧 标签: 未分类 gdb pstack | 发表时间:2012-10-15 04:32 | 作者:士豪 分享到: 出处:http://rdc.taobao.com/bl ...
- 在Android中使用am和input命令在实际使用中的注意事项以及小技巧
在Android使用到am和进行一些操作是非常方便的,比如一个重复自动的操作,具体用来实现一些什么是看个人需求了,接下来说对于am和input的使用. 本文适用于已经大概去了解了am和input的朋友 ...
- [20181219]script使用小技巧.txt
[20181219]script使用小技巧.txt --//前几天在使用strace时遇到问题,它的输出使用标准错误句柄.--//我在想平时使用sqlplus如果输出字段很多,屏幕看起来一片混乱.-- ...
- Linux下wget下载软件小技巧以及安装jdk、tomcat与ftp服务器
一.ftp的安装 装个ftp搞了一下午,感觉以前没那么麻烦的呀,结果到晚上才发现是实验室网的问题,换连手机的热点马上可以了,真是尴尬,把基本安装步骤记录一下: 1.检查安装vsftpd软件 使用如下命 ...
- Docker配置容器位置和小技巧
Docker使用小技巧 清理全部停止的docker容器 有时候我们会有很多已经停止的容器或者由于错误强制退出不能用的容器,那我们就需要删除了,但是我们一个一个的rm删除很麻烦,有多少容器就要rm多少次 ...
随机推荐
- FreeMarker处理json
在后台返回一个json结构时,在ftl处理方式如下 <#assign json="${text}"?eval /> ${json.test} 说明:json为接收的值, ...
- jq传统火车轮播图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python学习路线
目录: 硬件: 第一篇:操作系统简介 第二篇:操作系统 linux基础: 第一篇:初始Linux 第二篇:基本使用 第三篇:Linux进阶 python基础: 第一篇:python基础大纲 第二篇:变 ...
- 循序渐进之Spring AOP(4) - Introduction
前面描述的几种增强(Advice)都是在目标方法范围内织入,而引介(Introduction)不同,直接在类级别上添加目标未实现的接口方法. 在spring中可以通过扩展DelegatingIntro ...
- Java泛型集合
所谓泛型就是允许在定义类.接口时指定类型形参,这个类型形参将在声明变量.创建对象时确定.增加了泛型支持后的集合,完全可以记住集合 中元素的类型,并可以在编译时检查集合中元素的类型.即解决一些安全问题, ...
- python调用metasploit里的MS-17-010模块进行漏洞攻击
起因:看各位大佬们写的shellcode厉害的一匹,可惜自己没学C和汇编 也看不懂shellcode,只能写一个调用metasploit里的模块进行攻击了. 0x01 攻击机:192.168.223. ...
- 深度优先搜索(DFS)专题讲座PPT截图【需要原稿的请留言或私信】
以下是今晚我在bilibili直播讲DFS算法的时候的ppt截图,ppt搞了一下午,水平有限,只能做成这个样子,供大家参考!(如果需要原稿,请在评论区留言或私信告诉我,我会发到你的邮箱里),感谢各位的 ...
- Gym 100952B&&2015 HIAST Collegiate Programming Contest B. New Job【模拟】
B. New Job time limit per test:1 second memory limit per test:64 megabytes input:standard input outp ...
- Prime Ring Problem(dfs水)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...
- python列表三
>>> list1 = [123]>>> list2 =[234]>>> list1 > list2False>>> li ...