正则表达式及基础命令(3)
grep 实现文本内容检索和过滤 和grep类似的还有 egrep fgrep。grep主要是根据正则表达式检索文档。使用方法:
grep [option] ‘pattern’ filename
option选项:
-b 在匹配上的每一行前加上所在块儿号。
-i 比较式忽略大小写。
-n 显示匹配到行在原文中的行数。
-v 显示没有匹配到的行。
-l 显示到匹配字符的文件。
-A n 显示匹配到的字符后n行的内容
-B n 显示匹配到的字符前n行的内容
-C n 显示匹配到的字符前后各n行的内容
‘pattern’就是指正则表达式。 正则表达式包含一堆的元字符,
正则表达式的使用:
单词定位:
^ 行首定位符。
$ 行尾定位符。
mode/> 表mode在行尾。
/<mode 表mode在行首。
/<mode/> 在一行中仅有mode字符。
使用实例:grep ‘^mode’ /tmp/aa.txt。显示在/tmp/aa.txt中出现首字母为mode的行。
字符匹配:
. 匹配任意单个字符。
[ab] 出现a或b任意一个字符。
[:alpha:] 和bash中通配符一样,都表示任意一个字符。(同样适用于[:alnum:]等)
/(ABC/) 然后/n 引用第n个小括号。
grep匹配时贪婪模式,即尽可能长的匹配字符。eg:grep ‘ab.*’ /tmp/aa.txt。在/tmp/aa.txt中有字符串abbbb,则会匹配到abbbb所有字符,而不仅是前面的ab
次数匹配:
* 匹配0到任意次数。
c/{m,n/} 表示c至少出现m次至多n次。
c/{m,/} 表示c至少出现m次。
c/{,n/} 表示c至多出现n次
c/{n/} c出现n次。
颜色的显示:
--color=auto
扩展正则表达式多的几个命令
次数匹配:
+ 个数1到任意多次。
? 匹配0或1次。
a|b a或者b。ab|ac表abc或aac。如想表示ab 或ac则用(ab)|(ac)
但同时扩展正则表达式不能使用 /{/}和/(/)
基础命令(3)
cut 文本的剪切
eg: cut –d:-f1,3 /etc/passwd 表示以:为分隔符,截取/etc/passwd中每一行的第一部分和第三部分。
wc: 做文件行数,字符数,字节数的统计。
-w 单词统计
-l 行数统计
-c 字节数
-m 字符数
sort: 排序命令,只修改输出的内容,不修改源文件,默认排序是按照字符排序的,比如 1 在 2 前面,而不是按数值大小。
-r 逆序排列
-n 按数值大小排列
-f 忽略大小写
-u 忽略排序后重复的行
-t 指定分隔符
-k 指定字段。与-t一块儿使用,方法:sort –t: -k2 /etc/passwd 表示以冒号为分隔符,以第二段排序。
uniq 显示文件内不重复的行,注意:不重复的行必须相邻否则不能过滤,所以通常与sort连用。
diff 比较两个文件,而且产生补丁。
diff filename1 filename2>test.pach
得到补丁文件test.pach然后再filename1上打补丁方法为:patch filename1 test.pach。取消上述补丁方法为:加上参数 –R 即:patch –R filename1 test.pach。
aspell 检查文件拼写
aspell [option] <command> file
检查系统认为错误的内容,有很详细的操作说明。常在编程中使用。示例:aspell check test.txt
tr 删除命令。使用示例:echo redhat | tr –d e 表示从redhat中删除e符号。
sed 行编辑器
特点:
1. 没有破坏性
2. 不修改源文件
3. sed支持shell脚本
每次处理完一行之后在处理下一行,支持如vim中的 s///操作 eg:sed ‘1,3d’ a.txt 表示删除显示的1到3行。
sed ‘/no/d’ a.txt 删除显示含有no的行