博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
grep的小技巧
阅读量:4635 次
发布时间:2019-06-09

本文共 1234 字,大约阅读时间需要 4 分钟。

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 "^[^#]" 因该不会过滤掉空行。一个姓王的人如上:一个姓某某的人,相当于一某个普通字符“一台电视” 相当于空行

转载于:https://www.cnblogs.com/irockcode/p/7587273.html

你可能感兴趣的文章
【Flask】flask+uwsgi+nginx环境部署
查看>>
Get MAC address using POSIX APIs
查看>>
bzoj2120
查看>>
基于uFUN开发板的心率计(一)DMA方式获取传感器数据
查看>>
【dp】船
查看>>
oracle, group by, having, where
查看>>
⑥python模块初识、pyc和PyCodeObject
查看>>
object-c中管理文件和目录:NSFileManager使用方法
查看>>
Kibana:分析及可视化日志文件
查看>>
nodejs pm2使用
查看>>
cocos2d-x 3.10 PageView BUG
查看>>
装饰器的基本使用:用户登录
查看>>
CSS选择器总结
查看>>
mysql中sql语句
查看>>
head/tail实现
查看>>
sql语句的各种模糊查询语句
查看>>
vlc 学习网
查看>>
Python20-Day05
查看>>
Real World Haskell 第七章 I/O
查看>>
C#操作OFFICE一(EXCEL)
查看>>