1、grep 命令
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
[root@www ~]# grep [-acinv] [--color=auto] '查找字符串' filename
参数:
-a 不要忽略二进制数据。
-c 计算符合范本样式的列数。
-i 忽略字符大小写的差别。
-n 在显示符合范本样式的那一列之前,标示出该列的编号。-v 反转查找。
以下练习中 设置别名 alias grep='grep --color=auto'
练习范文 来自http://linux.vbird.org/linux_basic/0330regularex/regular_express.txt
- grep -n 'the' regular_express.txt
- grep -vn 'the' regular_express.txt
- grep -in 'the' regular_express.txt
- grep -n 't[ae]st' regular_express.txt
- grep -n '[^g]oo' regular_express.txt
- grep -n '[^a-z]oo' regular_express.txt [:lower:] 代表a-z
- grep -n '[0-9]' regular_express.txt [:digit:] 代表0-9
- grep -n '^the' regular_express.txt 只保留在行首出现的字符 ^
- grep -n '^[^a-zA-Z]' regular_express.txt 不是英文字母开头的 也可用 [:alpha:]
- grep -v '^$' regular_express.txt|grep -v '#' 去掉空白行 和 以#开头的注释行
2、. 小数点代表任意一个字符,* 代表重复前一个0到无穷多次
- grep -n 'g..d' regular_express.txt
- grep -n 'oo*' regular_express.txt
- grep -n 'goo*g' regular_express.txt 开头结尾都是g 中间至少一个o
- grep -n 'g.*g' regular_express.txt g开头 g结尾 .* 代表0个或多个任意字符
- grep -n 'o\{2\}' regular_express.txt 两个连续oo 需要对{} 进行转义
- grep -n 'go\{2,5\}g' regular_express.txt 2到5个o 2个以上的话 保留 逗号 去掉5
3、基础正则表达字符如下:
^word , word$ , 点 , * , \ , [list] , [n1-n2] , [^list] , \{n,m\}
4、 sed 工具
语法 sed [-hnv] [-e<script>] [-f scriptfile] file(s)
参数
-e<script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
-f<script文件>或--file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-h或--help 显示帮助。
-n或--quiet或--silent 仅显示script处理后的结果。
-V或--version 显示版本信息。
动作 [n1 [,n2]]
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
练习
- nl /etc/passwd |sed '2,5d' 列出 并删除2 到5行 ‘2,$’2到最后一行
- nl /etc/passwd |sed '2a drink tea' 第2行后 加上drink tea 2i 是在第2行前加
- nl /etc/passwd |sed '2,5c No 2-5 number' 2~5行 替换为了 后面的字符串
- nl /etc/passwd |sed -n '5,7p' 列出 文件内的5-7行
- sed 's/要被替换的字符串/新的字符串/g' 查找替换功能
- sed -i 's/\.$/\!/g' regular_express.txt 直接将. 改为!
5、扩展正则表达式
- + 重复一个或一个以上的前一个RE字符 egrep -n 'go+d' regular_express.txt
- ? 0或1次 前一个re字符 egrep -n 'go?d' regular_express.txt
- | 代表或 egrep -n 'gd|good' regular_express.txt
- () 组 egrep -n 'g(la|oo)d' regular_express.txt
- ( )+ 多个重复组的判别 echo 'AxyzxyzxyzC'|egrep 'A(xyz)+C'
6、awk 数据处理工具
语法 awk ‘条件类型1{动作1} 条件类型2 {动作2}... ’filename
- last -n 5 | awk '{print $1 "\t" $3}' 取出账号与登陆者的ip 且以【tab】分开 $1 代表变量1
- last -n 5|awk '{print $1 "\t lines:" NR "\t columns:" NF }' 变量 NR NF(每一行拥有的字段总数)
- cat /etc/passwd|\
> awk '{FS=":"} $3<10 {print $1 "\t " $3}' FS 目前的分割字符 - cat /etc/passwd|awk 'BEGIN {FS=":"} $3<10 {print $1 "\t " $3}'