Linux文本处理命令(wc,cut,sort,uniq,diff,patch)详解

我相信大家在使用过程中总会遇到想要提取某些自己需要的信息的情况,比如如下这四种情况:
1、找出ifconfig命令结果中eno16777728的IPv4地址
2、查出分区空间使用率的最大百分比值
3、查出/tmp的权限,以数字方式显示
这个时候,我们使用命令当然也可以查看,不过还需要自己通过眼睛去过滤不需要的信息,多费劲。如何让自己更轻松的看到自己想看到自己想看的信息呢?今天的文本处理命令能满足我们的简单需求。

wc 此wc非彼WC,在这里wc是 count的简写

wc – print newline, , and byte counts for each file
其表达格式:wc [OPTION]… [FILE]…
常用选项:
      -l:lines 只显示行数
      -w:words  只显示单词总数
      -c:bytes  只显示该内容字节总数

下面以实例来具体显示wc的功用
创建/test目录 创建/test/wc.txt文件
[root@localhost test]# cat > 1
hello me
hello my boy

使用cat在wc.txt内输入一些字符

[root@localhost test]# wc wc.txt 
 2  5 22 wc.txt  第一个2代表行数 第二个5代表单词数 第三个22代表该内容字节总数 
[root@localhost test]# wc -l wc.txt 
2 wc.txt
[root@localhost test]# wc -c wc.txt 
22 wc.txt
[root@localhost test]# wc -w wc.txt 
5 wc.txt

cut 
cut – remove sections from each line of files
表达格式:cut OPTION… [FILE]…
常用选项:

      -f #(单个字段)|#-#(连续多个字段)|#,…,#(离散多个字段)
      -c 按字符切割
      –output-delimiter=STRING指定输出分隔符
以/etc/passwd文件为对象做实验
1、取用户名及用户UID并指定输出的分隔符为#

[root@localhost test]# tail -5 /etc/passwd
laowang:x:4322:4322::/home/laowang:/bin/bash
u1:x:4323:4323:UUU:/home/u1:/bin/csh
u2:x:4324:4324::/home/u2:/bin/bash
u3:x:4325:4325::/home/u3:/bin/bash
u4:x:4326:4326::/home/u4:/sbin/nologin

通过上面内容,我们可以确定我们需要的内容在第一节跟第三节,同事分隔符为“:”
[root@localhost test]# cut -d: -f 1,3 /etc/passwd –output-delimiter=#
root#0
bin#1
daemon#2
adm#3
..

2、查看/etc/passwd文件最后一行,且从第5个字符开始截取到第十个字符.
[root@localhost test]# tail -1 /etc/passwd | cut -c 5-10
:4326:

sort 排序

sort – sort lines of text files
表达格式: sort [OPTION]… [FILE]…
常用选项:
      -t CHAR:指定分隔符
      -k #:用于排序比较的字段
      -n:基于数值大小排序
      -r:逆序排列
      -f:忽略字符大小写
      -u:重复内容只保留一行
还是以/etc/passwd为对象测试
显示UID最大的用户及其默认shell
[root@localhost test]# sort -t: -k 3 -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

basher:x:4329:4329::/home/basher:/bin/bash
nologin:x:4330:4330::/home/nologin:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

显示成功,但是结果并不直观,我们在利用上面的cut命令对结果进行进一步加工

[root@localhost test]# sort -t: -k 3 -n /etc/passwd | tail -1 | cut -d: -f 1,7
nfsnobody:/sbin/nologin

uniq 报告或移除重复的行
uniq – report or omit repeated lines
表达格式:uniq [OPTION]… [INPUT [OUTPUT]]
常用选项:
      -c:显示每行的重复次数
      -u:仅显示未曾重复过的行
      -d:仅显示重复过的行
为了演示uniq命令方便,我们创建一个有重复行的文件/test/uniq.txt
[root@localhost test]# cat uniq.txt 
qqqq
qqqq
qqqq
dfsdf
aa
bb
bb
cc
q
[root@localhost test]# uniq uniq.txt 
qqqq
dfsdf
aa
bb
cc
q

uniq 加文件默认将重复的内容隐藏。
[root@localhost test]# uniq -c uniq.txt 
      3 qqqq
      1 dfsdf
      1 aa
      2 bb
      1 cc
      1 q
      1 q
[root@localhost test]# uniq -u uniq.txt 
dfsdf
aa
cc
q
[root@localhost test]# uniq -d uniq.txt 
qqqq
bb

——————————————————————————–
diff  逐行比较文件的异同

diff – compare files line by line
diff [OPTION]… FILES
常用选项:

      -u:使用unified机制,即显示要修改的行的上下文,默认3行
[root@localhost test]# cat diff1 diff2
abcd
abcde
abcd
bcd
abcde
bc
[root@localhost test]# diff diff1 diff2   
1c1


> bcd
3c3


> bc
[root@localhost test]# diff -u diff1 diff2
— diff1      2016-08-05 19:46:36.985538120 +0800
+++ diff2      2016-08-05 19:46:54.951836769 +0800
@@ -1,3 +1,3 @@
-abcd
+bcd
 abcde
-abcd
+bc

patch 向文件打补丁
基本概念 patch – apply changes to files
表达格式patch [-blNR][ -c| -e| -n][-d dir][-D define][-i patchfile]
              [-o outfile][-p num][-r rejectfile][file]
patch [OPTION] -l /PATH/PATH_FILE /PATH/OLDFILE

——————————————————————————–
常用的简单文本处理命令介绍完毕,下面来利用本文介绍的命令来解决开头提出的四个

1、找出ifconfig命令结果中eno16777728的IPv4地址
ifconfig | tr -cs ‘[:digit:].' ‘:'| cut -d: -f 5
10.1.253.79

以上共分3步
1)先将ifconfig的内容当做tr的基本输入内容;2)将第一步的内容中所有非数字的内容替换为”:”并压缩;3)看所需的IP在第几段然后使用cut命令进行切割

2、查出分区空间使用率的最大百分比值
查看分区空间命令为df
[root@localhost test]# df | tr -s ‘ ‘ ‘:'| cut -d: -f 5| tr -d ‘%'|sort -n|tail -1
29

要实现上述内容需要
1)使用df列出分区空间使用率的内容,
2)之后使用tr将空格替换为:并进行压缩,
3)再之后使用cut进行切割将使用率的列取出,
4)再使用tr将%剔除,
5)之后使用sort按数值大小进行排序
6)最后再使用tail取最后一行的最大值。

3、查出/tmp的权限,以数字方式显示
查看/tmp权限可以使用stat,它可以自动显示处其权限对应的数值,剩下的只需要我们将数字从内容中取出即可。
[root@localhost test]# stat /tmp/ | tr -cs ‘[:digit:]' ‘:'| cut -d: -f 9
1777

1)先显示权限内容
2)将内容中所有非数字替换为“:”并压缩
3)数出对应的权限数字在第几段后进行切割

更多内容请长按二维码关注(更有不定期发红包活动吆^0^):
致儒先生

转载自:https://www.linuxidc.com/Linux/2016-08/134044.htm

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 智乐兔
转载请注明:转自《Linux文本处理命令(wc,cut,sort,uniq,diff,patch)详解
本文地址:https://www.zhiletu.com/archives-8034.html
关注公众号:智乐兔

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!

在线客服
在线客服 X

售前: 点击这里给我发消息
售后: 点击这里给我发消息

智乐兔官微