第五章   文本过滤

 这一章断断续续的看了2周,还看的似懂非懂。没有办法,先把笔记写出来。

 

 

第五章   文本过滤

 
 
这则表达式
find
grep
awk
sed
sort uniq join cut paste split
 
 
 
~~~~~~
基本元字符
 
^ 只匹配行首
$ 之匹配行尾
* 多个或者零个字符匹配或者重复序列
[] 只匹配[]内的字符
\  屏蔽元字符的含义
.  匹配任意的单字符
patten \{n\} 匹配前面pattern出现的次数
 
 
 
匹配举例:
 
 
 
^$ 匹配空行
^.$ 匹配单个字符
 
 
\*.\pas 匹配以*.pas 结尾的字符,其中* . 都为特殊字符,所以用\匹配。
 
[0-9] 表示匹配任意一个数字
 
[A-Z a-z] 匹配任意大小写字母
 
[A-Z a-z 0-9]匹配任意字母大小写字符
 
[S,s] 匹配大、小写S
 
 
A\{2\}B  A出现两次,AAB
A\{4,\}B A至少出现四次  AAAAB AAAAAAB AAAAAAB............
A\{2,4\}B A出现的范围在2-4次之间  AAB AAAB AAAAB
[0-9]\{3\}.[0-9]\{3\}.[0-9]\{3\}.[0-9]\{3\} 匹配ip地址
 
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
正则表达式的命令
 
 
 
 
find命令  
 
 
 
ex:
 
find -name "*.txt" -print
 
 
 
find . -perm 755 -print   查找当前目录下755权限的文件打印到屏幕上
 
 
find `pwd` -user root -print  查找当前目录下user是root的文件
 
nohup find -nouser -print >nouser.out & 后台查找nouser文件,目录定向到nouser.out文件
 
find /var -mtime -5 -print  查找var目录下,5天以内的文件打印出来
find /var -mtime +3 -print  查找var目录下,3天以前的文件打印出来
 
find `pwd` -newer "myfile" ! -newer "myfileeee" -print  
当前目录下查找比myfile文件新,比myfileeee文件旧的文件
 
 
find /etc -type l -print 查找etc目录下的链接文件 
 
find . -size 1000000c -print
 
 
 
~~~~~~~~~~~~~~~~~
用exec ok 执行shell命令
 
find . -type f -exec ls -l {} \;       
查找当前目录下f类型文件,并执行ls -l 命令详细列出文件信息( 其中{}和\之间有 空格 )
 
find /var/log -name "*.log" -mtime +5 -ok rm {} \;
查找/var/log目录下5天前的.log结尾文件并删除之。
 
 
 
 
exec 无法解决内存溢出的问题,xargs可以:
find ./ -perm -7 -print |xargs chmod 777 
 
 
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
grep 
 
 
-i 区分大小写
-v 过滤
-c 输出行号
 
 
Grep 标准的grep命令
Egrep 扩展grep命令
Fgrep 快速grep命令
 
 
 
 
ex:
 
grep "file" *.txt   在当前目录下的所有.txt结尾文件中搜索file字眼
grep "the" *        在当前目录下的所有文件中搜索the字眼
 
grep "2004:22:5[0-9]" myfile  抓取出2004:22:50到2004:22:59这之间的字段
grep "^[^201]" myfile  
 
grep "^$" myfile  过滤出没有内容的文件 ^表示行首  $表示行尾
 
ls -l >lsout.txt
grep "^d" lsout.txt 过滤出行首为d的内容(即为目录)
 
grep "5[[digit:]][[digit:]] lsout.txt  过滤出500-599的文件内容 [[digit:]]表示0-9的数字
 
grep "[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}" /etc/resolv.conf
过滤出/etc/resolv.conf中的产品地址。
 
grep "/htm/call_info.php" myfile|wc -l 
查看call_info.php页面有多少的访问量
 
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~
~~~~~~~~~~
awk命令  
 
由操作和模式组成
 
模式决定何时触发(BEGIN,END)
动作对数据进行处理如   {print} 
 
分隔符 域 记录 $0表示所有域,分隔符默认是空格
 
 
awk所有的模式操作都是有' '之间括起来的
 
 
ex:
 
[root@host ~]# awk 'BEGIN {print"that is what I am talking about\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"} {print$1"\t"$4} END {print"end-of-report"}' lsout.out |more
 
 
意思为:打印出三部分:
 
 
一,打印出"that is what I am talking about"后换行,在打印出
" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ "
 
二,打印出lsout.out文件中的$1域 和$4域
 
三,打印出"end-of-report"
 
 
 
~~~~~~~~~~~~~~~~~~~~~~
 
awk中的特殊元字符
 
+ 表示匹配任意字符
? 表示匹配单个字符
 
 
匹配操作字符
 
~  表示匹配
!~ 表示不匹配
 
 
 
 
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sed 命令
 
 
不操作原始文件,操作的只是原本文件的一个副本,如果结果没有重新定向到一个文件,则输出到屏幕。
 
 
x,y  表示行号范围从x到y
/pattern/ 查询包含模式的行
x,y! 查询不包含制定行号x和y的行
 
 
基本shell编辑命令
 
p   打印匹配行号
=   显示文件行号
d   删除定位行
-n  不打印没有匹配到的
=    显示文件行号
 
sed -n '2p' ifelif.out   打印出第二行
sed -n '1,4p' ifelif.out  打印出第一到四行
sed -n '/do/p' fori     fori文件中匹配do字符的行,并打印到屏幕。
sed -n '2,/do/p' fori     中fori文件的第二行匹配,直到匹配到do字符,其间内容打印到屏幕
sed -n '/^$/='  fori     fori文件中匹配出无内容的行,打印行号到屏幕
 
 
 
 
 
sort 合并与分割
 
 
uniq
 
grep "php" myfile|awk '{print $1}'|sort|uniq -c
 
 
join 
split
cut
 
 
 
 

本文出自 “初出茅庐” 博客,谢绝转载!

你可能感兴趣的:(职场,休闲,文本过滤)