一、文件查看命令
(1)普通查看工具:cat,tac,rev
1、cat命令常用选项
-n:显示行号
-E:显示行结束符$
-A:显示所有控制符
2、tac:从最后一行开始倒序显示
3、rev:将每一行的内容反转显示
(2)分页查看内容:more,less
less功能比more多
less是man帮助使用的分页器,用法与man相同
(3)显示文本前或后行内容:head,tail
1.head与tail通用选项
-c#:获取指定#字节内容
-n #或-#:获取指定行数
2.tail-f:跟踪显示文件新追加内容
二、文本处理工具
(1)按列抽取文本工具:cut
-c:按字符切割
-d:按分隔符切割
-f:指明显示区域
如,-f1、-f 1,3,5、-f 2-4、-f 1,5-9
查看passwd文件,显示UID及shell类型
[root@centos7 tmp]# head -5 /etc/passwd |cut -d: -f3,7 0:/bin/bash 1:/sbin/nologin 2:/sbin/nologin 3:/sbin/nologin 4:/sbin/nologin
(2)分析文本的工具:wc,sort,uniq
1. wc:统计行数,单词数,字符数,字节数
-l:只统计行数
-w:只统计单词数
-m:只统计字符数
-c:只统计字节数
如下,分别显示行数,单词数,字符数
[root@centos7 tmp]# wc /etc/passwd 48 93 2513 /etc/passwd
(3)文本排序工具:sort
把排序后的文本输出到STDOUT,不改变原文件
常用选项:
-n:按数字大小排序
-h:按人类易读单位排序
-f:忽略(fold)字符串中的大小写
-u:删除选项中重复的行
-t:按指定分隔符
-k #:按分隔符隔开的第#列进行排序,可重复使用
(4)重复行处理工具:uniq
常用选项:
-c:显示每行重复的次数
-d:仅显示重复的行
-u:仅显示不重复的行
常和sort结合使用
sort|uniq -c
例子,统计所用用户shell类型使用个数
[root@centos7 ~]# cut -d: -f7 /etc/passwd|uniq -c #没有sort排序得到错误结果 1 /bin/bash 4 /sbin/nologin 1 /bin/sync 1 /sbin/shutdown 1 /sbin/halt 35 /sbin/nologin 4 /bin/bash 1 /sbin/nologin [root@centos7 ~]# cut -d: -f7 /etc/passwd|sort|uniq -c #sort结合uniq使用得到正确结果 5 /bin/bash 1 /bin/sync 1 /sbin/halt 40 /sbin/nologin 1 /sbin/shutdown
(5)其他工具:paste,diff,patch
1.paste:将连个文件同行合并
2.diff:比较两个文件的区别
3.patch:复制在其他文件中的改变
diff -u file.old file.new >patch.dd #将比较信息输出到文件中 patch file.old patch.dd #通过补丁对文件更新
三、grep
grep: Global search REgular expression and Print out the line.
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;
egrep等价于grep -E,支持扩展正则表达式
fgrep等价于grep -F 不支持正则表达式,但速度快
(1)grep [OPTIONS] PATTERN [FILE…]
常用选项:
-n:显示匹配的行号
-c: 统计匹配的行数
-v: 显示不能够被pattern匹配到的行
-o: 仅显示匹配到的字符串
-i: 忽略字符大小写
-w:整行匹配整个单词
-e:实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
-q: 静默模式,不输出任何信息
-A #:after, 后#行
-B #: before, 前#行
-C #:context, 前后各#行
-E:使用ERE
四、正则表达式
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,
而表示控制或通配的功能。
正则表达式分为两类:
1.基本正则表达式:BRE
2.扩展正则表达式:ERE
元字符分类:字符匹配、匹配次数、位置锚定、分组
(1)字符匹配
–构成模式的基本元素
. : 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[0-9],[a-zA-Z],[a-z0-9]…
[^]:匹配指定范围外的任意单个字符
[^0-9]非数字
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]
(2)匹配次数
匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数
*:匹配前面的字符任意次,包括0次;贪婪模式:尽可能长的匹配
.*:任意长度的任意字符
\?:匹配其前面的字符0或1次
\+:匹配其前面的字符至少1次
\{m\}:匹配前面的字符m次
\{m,n\}:匹配前面的字符至少m次,至多n次
\{,n\}:匹配前面的字符至多n次
\{m,\}:匹配前面的字符至少m次
(3)位置锚定
位置锚定:定位出现的位置;更加精确描述字符的位置
–这部分用法比较灵活,容易忘记锚定,造成错误匹配
^:行首锚定,用于模式的最左侧
$:行尾锚定,用于模式的最右侧
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行
\< 或 \b:词首锚定,用于单词模式
\> 或 \b:词尾锚定;用于单词模式
\<PATTERN\>:匹配整个单词
(4)分组
分组:\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+
分组括号中的模式匹配到的内容会被正则表达式引擎记w录于内部的变量中,这些变量的命名方式为: \1,\2,\3, …
\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
实例: \(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)
例子:添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin),而后找出/etc/passwd文件中用 户名同shell名的行
[root@centos7 movie]# egrep "^(.*\>).*\1$" /etc/passwd sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt nologin:x:1005:1005::/home/nologin:/sbin/nologin
^(.*\>)——某个开头的单词
\1$———-以(.*\>)这个单词结尾
这样就找到符合题意的行
扩展正则表达式的元字符
(1)字符匹配
保持不变
(2)匹配次数
\+ –> +
\? –> ?
\{\} –> {}
(3) 位置锚定
保持不变
(4) 分组
\(\) –>()
后向引用:\1,\2,\3…
(5) 或者表示
cat|dog :cat或dog
(C|c)at:Cat或cat
*****牛刀小试******
1、显示当前系统root、fly或halt用户的UID和默认shell
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
4、使用egrep取出上面路径的目录名
答案:
1.egrep "^(root|fly|halt)\>" /etc/passwd|cut -d: -f3,7
2.egrep "^[a-zA-Z_]+\(\).*" /etc/rc.d/init.d/functions
3.egrep -o "[^/]+/?$"
4.egrep -o ".*\<"
原创文章,作者:cutemsyu,如若转载,请注明出处:http://www.178linux.com/31757