Linux文本处理工具及grep
常见的文本处理工具
在日常的Linux运维工作当中,我们经常要在一些文本当中抽取过滤出我们所需要的信息,从而达到我们的需求,需要特定的文本处理工具来帮我们完成此类操作
本章节主要讲解的内容有:
文件查看:cat
分页查看文本:less、more
抽取文件特定行数:head、tail
抽取文本特定列:cut
合并文本:paste
文本统计:wc
文本排序并统计:sort、uniq
比较文件:diff、patch
cat:连结查看文本和输出至标准输出
-n:为每行添加行号
-A:显示所有控制符
-E:为每行显示结束符$
-s:压缩重复的空白行
-b:非空行进行编号
[root@CentOS6 ~]# cat -A test.txt #显示所有控制字符
one$
two$
$
three$
$
[root@CentOS6 ~]# cat -E test.txt #在每行结尾添加$符
one$
two$
$
three$
$
[root@CentOS6 ~]# cat -b test.txt #非空行编号
1one
2two
3three
[root@CentOS6 ~]# cat -n test.txt #显示行号
1one
2two
3
4three
5
[root@CentOS6 ~]# cat -s test.txt #压缩空白行
one
two
three
[root@CentOS6 ~]#
nl:将文件每行添加行号显示
tac:逆序显示文件内容
rev:反向显示文件内容
more: 分页查看文件
more [OPTIONS...] FILE...
-d: 显示翻页及退出提示
less:一页一页查看文本文件
查看时有用的命令包括:
/文本搜索文本
n/N跳到下一个or 上一个匹配
head:抽取文本前n行
-n #:抽取文本前#行
-c #:抽取文本前#个字节7
-#:指定行数
tail:抽取文本后n行
-n #:抽取文本后#行
-#:指定行数
-c #:抽取文本后#个字节
-f:追踪文本新添加的内容,不退出文本
[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
[root@CentOS6 ~]# tail -3 /etc/passwd #抽取文本的后三行
nologin:x:510:514::/home/nologin:/sbin/nologin
mage:x:511:515::/home/mage:/bin/bash
wang:x:512:516::/home/wang:/bin/bash
[root@CentOS6 ~]# head -c 100 /etc/passwd #抽取文本前100个字节
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nol[root@CentOS6 ~]#
[root@CentOS6 ~]# tail -c 100 /etc/passwd #抽取文本后100个字节
ome/nologin:/sbin/nologin
mage:x:511:515::/home/mage:/bin/bash
wang:x:512:516::/home/wang:/bin/bash
[root@CentOS6 ~]#
cut:抽取文本
-d DELIMITER:指明分隔符,默认tab
-f FILEDS:
#:第#个字段
#,#:离散表示法,例如1,3,5
#-#:连续表示法,例如1-3
#,#-#,#:混合表示法例如,1,3-5,7
-c:按字符切割
--output-delimiter:指定输出分隔符
123456789 [root@CentOS6 ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@CentOS6 ~]# cut -d: -f1,3 test.txt #以:为分隔符,抽取文本的第1,3列
root:0
bin:1
daemon:2
[root@CentOS6 ~]#
paste:合并文本
-d DELIMITER:指定输出分隔符
-s:所有行显示为一行
[root@CentOS6 ~]# paste issue test.txt #将两个文本内容合并
CentOS release 6.8 (Final)root:x:0:0:root:/root:/bin/bash
Kernel \r on an \mbin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@CentOS6 ~]# paste -s issue test.txt #一个文本内容显示为一行
CentOS release 6.8 (Final)Kernel \r on an \m
root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@CentOS6 ~]#
wc:文本统计
-c:统计字节数
-l:统计行数
-w:统计单词书
-m:统计字节数
[root@CentOS6 ~]# wc -l /etc/passwd #统计行数
47 /etc/passwd
[root@CentOS6 ~]# wc -w /etc/passwd #统计单词数
67 /etc/passwd
[root@CentOS6 ~]# wc -m /etc/passwd #统计字节数
2143 /etc/passwd
[root@CentOS6 ~]# wc -c /etc/passwd #统计字节数
2143 /etc/passwd
[root@CentOS6 ~]#
sort:文本排序
-u:重复的行只出现一次
-r:逆序排序
-n:按数字从小到大排序
-f:忽略大小写
-t DELIMITER:指明分隔符
-k #:按照指定的分隔符来指定列
[root@CentOS6 ~]# cat test.txt
1
1
2
1
3
[root@CentOS6 ~]# sort -u test.txt #重复的行只显示一次
1
2
3
[root@CentOS6 ~]# sort -n test.txt #数字从小到大排序
1
1
1
2
3
[root@CentOS6 ~]# sort -r test.txt #逆序排序
3
2
1
1
1
[root@CentOS6 ~]# sort -t' ' -k1 -n test.txt #对指定的列排序
1
1
1
2
3
[root@CentOS6 ~]#
uniq:统计重复的行
-c:显示重复行的重复次数
-d:仅显示重复过的行
-u:显示不曾重复的行
一般和sort命令搭配使用
[root@CentOS6 ~]# cat test.txt
1
1
2
1
3
[root@CentOS6 ~]# uniq -c test.txt #显示重复行的重复次数
2 1
1 2
1 1
1 3
[root@CentOS6 ~]# uniq -d test.txt #仅显示重复的行
1
[root@CentOS6 ~]# uniq -u test.txt #显示不曾重复的行
2
1
3
[root@CentOS6 ~]#
diff:比较两个文件的区别
以逐行的方式比较两个文件的不同之处
diff /PATH/TO/OLDFILE /PATH/TO/NEWFILE > /PATH/TO/PATHCH_FILE
-u:使用unfied机制,即显示要修改的行的上下文,默认为三行
patch:向文件打补丁
path [OPTIONS] -i /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE
patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE