文件查看和正则表达式

文件查看工具

        cat,tac,rev,more,less,head,tail

cat:查看文本

         cat [OPTION]… [FILE]…

         -E:显示行结束符$

         -n:对显示出的每一行进行编号

tac:查看文件

         功能同cat命令,但是cat正序显示文件,tac反序显示文件

         tac [OPTION]… [FILE]…

         -E:显示行结束符$

         -n:对显示出的每一行进行编号

rev:查看文件

         按正序的行显示文件,但行中内容按反序显示

[root@CentOS6 ~]# cat acl3

g:g2:wx

d:g:g2:wx

[root@CentOS6 ~]# tac acl3

d:g:g2:wx

g:g2:wx

[root@CentOS6 ~]# rev acl3

xw:2g:g

xw:2g:g:d

more:分页查看文件,到末尾自动退出

        more [OPTIONS…] FILE…

less:一页一页地查看文件,到末尾时不退出

         查找字符串的命令:

         /PATTERN   搜索文本

         ?PATTERN  搜索文本

                 n:下一个匹配的字符串

                 N:上一个匹配的字符串

         less命令是man命令使用的分页器(同man的翻页手法)

head:查看文件的前面几行,默认查看前10行

         head [OPTION]… [FILE]…

                 -n #:指定获取前#行

                 -#:指定前#行

[root@CentOS6 ~]# head -3 /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

tail:查看文件的后面几行,默认查看后10行

         tail [OPTION]… [FILE]…

                 -n #:指定获取后#行

                 -#:指定获取后#行

                 -f:跟踪显示文件新追加的内容

         eg:tail -n0 -f file  只查看file文本的新加的行

tail-f.png

[root@CentOS6 ~]# tail -3 /etc/passwd

tom4:x:509:509::/home/tom4:/bin/bash

tom5:x:510:510::/home/tom5:/bin/bash

hadoop:x:511:511::/home/hadoop:/bin/bash

文件查看及处理工具

        cut,paste,wc,sort,diff

cut:查看文件并切割文件

         cut [OPTION]… [FILE]…

                 -d DELIMITER: 指明分隔符,默认tab

                 -f FILEDS:

                         #:第#个字段

                         #,#[,#] :离散的多个字段,例如1,3,6

                                  如果是3,1其排序结果也是1,3

                         #-# :连续的多个字段, 例如1-6

                 -c:按字符切割

                 -dB:等同于 -d "  "

                 –output-delimiter=STRING指定输出分隔符

[root@CentOS6 ~]# tail -3 /etc/passwd | cut -d: -f3,7,1

tom4:509:/bin/bash

tom5:510:/bin/bash

hadoop:511:/bin/bash

paste 合并两个文件同行号的列到一行

         paste [OPTION]… [FILE]…

                 -d:指定分隔符,默认用TAB

                 -s:所有行合成一行显示

         paste -d: f1 f2

[root@CentOS6 ~]# cat acl1 acl2

g:g2:rw

d:g:g2:rw

g:g3:r

d:g:g3:r

g:g2:rx

d:g:g2:rx

g:g3:r

d:g:g3:r

[root@CentOS6 ~]# paste -d: acl1 acl2

g:g2:rw:g:g2:rx

d:g:g2:rw:d:g:g2:rx

g:g3:r:g:g3:r

d:g:g3:r:d:g:g3:r

wc:文本数据统计

         # wc acl1

                  4  4  34  acl1

                  行数 字数 字符数 文件名

         -l 只计数行数

         -w 只计数单词总数

         -c 只计数字节总数

         -m 只计数字符总数

sort:文本排序

         sort [options] file(s)

                 -n 执行按数字大小整理

                 -t char 使用char做分隔符

                 -k # 指定排序时安#行的数据对file进行排序

                 -r 反向排序

                 -f 忽略字符大小写

                 -u 删除输出中的重复行

[root@CentOS6 ~]# sort -t: -k3 -n /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

uniq:报告或移除重复的行

         uniq [OPTION]… [FILE]…

                 -c: 显示每行重复出现的次数(重复行只显示一次)

                 -d: 仅显示重复过的行

                 -u: 仅显示不曾重复的行

                 连续且完全相同的行方为重复

                          常和sort命令一起配合使用,效果更好

                          eg:cut -d: -f7 /etc/passwd | sort | uniq -c

[root@CentOS6 ~]# cut -d: -f7 /etc/passwd |sort |uniq -c

     15 /bin/bash

      1 /bin/sync

      1 /sbin/halt

     29 /sbin/nologin

      1 /sbin/shutdown

练习:1 、找出ifconfig 命令结果中本机的所有IPv4 地址

csu1.png

2 、查出分区空间使用率的最大百分比值

csu2.png

3 、查出用户UID最大值的用户名、UID 及shell 类型

csu3.png

4 、查出/tmp的权限,以数字方式显示

csu4.png

diff:比较文件

         diff命令的输出被保存在一种叫做“补丁”的文件中

         diff /PATH/TO/OLDFILE /PATH/TO/NEWFILE > /PATH/TO/PATCH_FILE

                -u:使用unified机制,显示要修改的行的上下文,默认显示3行

patch:向文件打补丁

         适用-b选项来自动备份改变了的文件,老文件的新名叫file.orig

         patch /PATH/TO/OLDFILE < /PATH/TO/TATCH_FILE

         -R选项:恢复老文件

[root@CentOS6 testdir]# cp /etc/fstab ./

cp: overwrite `./fstab'? y

[root@CentOS6 testdir]# cp fstab fstab.cg

[root@CentOS6 testdir]# vi fstab.cg

[root@CentOS6 testdir]# diff -u fstab fstab.cg > fstab.patch

[root@CentOS6 testdir]# diff fstab fstab.cg 

5c5

< #

> # hello world

[root@CentOS6 testdir]# patch fstab < fstab.patch 

patching file fstab

[root@CentOS6 testdir]# diff fstab fstab.cg 

Linux上文本处理三剑客

         grep :文本过滤( 模式:pattern) 工具;

                  grep, egrep, fgrep (不支持正则表达式搜索,只支持纯文本搜索)

         sed :stream editor ,流编辑器,文本编辑工具;

         awk :Linux 上的实际为gawk(GNU awk) ,文本报告生成器;

         正则表达式:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

         支持正则表达式的程序:grep, vim, less,nginx等

         正则表达式分两类:

                 基本正则表达式:BRE

                          grep ,egrep -G

                 扩展正则表达式:ERE

                          grep -E, egrep

         正则表达式引擎:

                 采用不同算法,检查处理正则表达式的软件模块

                 PCRE(Perl Compatible Regular Expressions)

         元字符分类:字符匹配、匹配次数、位置锚定、分组

grep

         grep: Global search REgular expression and Print out the line.

         作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;

         模式:由正则表达式字符及文本字符所编写的过滤条件

         grep [OPTIONS] PATTERN [FILE…]

         grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]

                 –color=auto:  对匹配到的文本着色显示;

                 -v: 显示不能够被pattern匹配到的行;

                 -i: 忽略字符大小写

                 -n:显示匹配的行号

                 -c: 统计匹配的行数,而不显示匹配到的内容

                 -o: 仅显示匹配到的字符串;

                 -q: 静默模式,不输出任何信息

                 -A #:after,显示匹配的行及其后#行

                 -B #: before,显示匹配的行及其前#行

                 -C #:context,显示匹配的行及其前后各#行

                 -e:实现多个选项间的逻辑or关系

                          grep –e 'cat' -e 'dog' file

                 -E:使用ERE

                          扩展的正则表达式

         基本正则表达式元字符:

                 字符匹配:

                         . :  匹配任意单个字符;

                         []:  匹配指定范围内的任意单个字符

                         [^]:匹配指定范围外的任意单个字符

                         [:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]

                 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式:尽可能长的匹配

                         * :匹配前面的字符任意次,包括0次

                         .* :任意长度的任意字符

                         \? :匹配其前面的字符0或1次

                         \+ :匹配其前面的字符至少1次

                         \{m\} :匹配前面的字符m次

                         \{m,n\} :匹配前面的字符至少m次,至多n次

                                 \{,n\} :匹配前面的字符至多n次

                                 <=n次

                                 \{m,\} :匹配前面的字符至少m次

                                 >=m次

                 位置锚定:定位出现的位置

                         ^ :行首锚定,用于模式的最左侧

                         $ :行尾锚定,用于模式的最右侧

                         ^PATTERN$:  用于模式匹配整行

                                 ^$:  空行

                                 ^[[:space:]]*$ :空白行或包含tab字符的行

                         \< 或 \b :词首锚定,用于单词模式的左侧

                         \> 或 \b :词尾锚定;用于单词模式的右侧

                                 注意:在grep中,字母和数字的组合也被视为单词

                                 \<PATTERN\>:锚定以PATTERN表达式做为单词的行

                 分组及引用

                         \(\):将1个或多个字符捆绑在一起作为一个整体进行处理

                                 \(xy\)*ab:xy作为一个整体出现0此或多次

                                 注意:分组括号中的模式匹配到的内容会被正则表达式引擎记录与内部变量中,这些变量为:

                                         \1:模式从左侧起,第一个左括号以及与其匹配的右括号之间的内容

                                         \2:模式从左侧起,第二个左括号以及与其匹配的右括号之间的内容

                                         \3:

                                         ……

                         后向引用:引用前面的分组括号中的模式所匹配的字符,且引用中的数据和分组模式匹配到的数据是一样

练习:1、显示/etc/passwd 文件中不以/bin/bash 结尾的行

grep1.png

2 、显示用户rpc 默认的shell 程序

grep2.png

3 、找出/etc/passwd 中的两位或三位数

grep3.png

4 、找出"netstat -tan" 命令的结果中以'LISTEN' 后跟0 、1或多个空白字符结尾的行

grep4.png    

egrep 及扩展的正则表达式

         egrep = grep -E

         egrep [OPTIONS] PATTERN [FILE…]

                  选项:-i,-o,-v,q,-A,-B,-C

                          -G:支持基本的正则表达式

         扩展正则表达式元字符:

                 字符匹配:

                         .:  匹配任意单个字符;

                         []:  匹配指定范围内的任意单个字符

                         [^]:匹配指定范围外的任意单个字符

                                  [:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]

                 匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数,默认工作在贪婪模式,尽可能长的匹配

                         * :匹配前面的字符任意次,包括0次

                         .* :任意长度的任意字符

                         ? :匹配其前面的字符0或1次

                         + :匹配其前面的字符至少1次

                         {m} :匹配前面的字符m次

                         {m,n} :匹配前面的字符至少m次,至多n次

                                 {,n} :匹配前面的字符至多n次

                                 <=n次

                                 {m,} :匹配前面的字符至少m次

                                 >=m次

                         位置锚定:定位出现的位置

                         ^ :行首锚定

                         $ :行尾锚定

                         ^PATTERN$:  用于模式匹配整行

                                 ^$:  空行

                                 ^[[:space:]]*$ :空白行或包含tab字符的行

                         \< 或 \b :词首锚定

                         \> 或 \b :词尾锚定

                                 注意:在grep中,字母和数字的组合也被视为单词

                                 \<PATTERN\>:锚定以PATTERN表达式做为单词的行

                 分组及引用

                         ():括号内模式会被记录于正则表达式引擎中:

                         后向引用:\1,\2,\3……

                 或者

                         a|b:a或者b

                         eg:C|cat :表示C或者cat

                         (C|c)at :表示Cat或者cat

练习:1 、显示当前系统上,root,gao和user1用户的相关信息

egrep1.png

2 、统计以root 身份登录的每个远程主机IP

egrep2.png

3 、使用egrep 取出/etc/rc.d/init.d/functions

egrep3.png

原创文章,作者:megedugao,如若转载,请注明出处:http://www.178linux.com/30235