第十一章 Linux系统之文件处理基础命令

一、常用文件处理命令-sort

1.含义

sort命令的功能是对文件内容进行排序。有时文本中的内容顺序不正确,一行行地手动修改实在太麻烦了。此时使用sort命令就再合适不过了,它能够对文本内容进行再次排序。

语法格式:sort [参数] 文件

2.常用参数:

-b 忽略每行前面开始出的空格字符
-c 检查文件是否已经按照顺序排序
-d 除字母、数字及空格字符外,忽略其他字符
-f 将小写字母视为大写字母
-i 除040至176之间的ASCII字符外,忽略其他字符
-m 将几个排序号的文件进行合并
-M 将前面3个字母依照月份的缩写进行排序
-n 依照数值的大小排序
-o <输出文件> 将排序后的结果存入制定的文件
-r 以相反的顺序来排序
-t <分隔字符> 指定排序时所用的栏位分隔字符
-k 指定需要排序的栏位

3.常用示例

对指定的文件内容按照字母顺序进行排序

[root@jindada ~]# cat fruit.txt 
banana
pear
apple
orange
raspaberry
[root@jindada ~]# sort fruit.txt 
apple
banana
orange
pear
raspaberry

对指定的文件内容按照数字大小进行排序

[root@jindada ~]# cat number.txt 
45
12
3
98
82
67
24
56
9
[root@jindada ~]# sort -n number.txt 
3
9
12
24
45
56
67
82
98

以冒号(:)为间隔符,对指定的文件内容按照数字大小对第3列进行排序:

[root@jindada ~]# sort  -t ":"  -nk3  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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
………………省略部分输出信息………………

二、常用文件处理命令-uniq

1.含义

uniq命令来自于英文单词unique的缩写,中文译为独特的、唯一的,其功能是用于去除文件中的重复内容行。uniq命令能够去除掉文件中相邻的重复内容行,如果两端相同内容中间夹杂了其他文本行,则需要先使用sort命令进行排序后再去重复,这样保留下来的内容就都是唯一的了。

语法格式:uniq [参数] 文件

2.常用参数:

-c 打印每行在文本中重复出现的次数
-d 每个重复纪录只出现一次
-u 只显示没有重复的纪录

3.常用示例

对指定的文件进行去重操作

[root@jindada ~]# sort  file.txt 
123
123
123
456
abc
abc
edf

[root@jindada ~]# sort  file.txt | uniq  
123
456
abc
edf

对指定的文件进行去重操作,打印每行在文本中重复出现的次数

[root@jindada ~]# sort  file.txt | uniq  -c
      3 123
      1 456
      2 abc
      1 edf

对指定的文件进行去重操作,并安装相应的sort参数排序

[root@jindada ~]# sort  file.txt | uniq  -c | sort  
      1 456
      1 edf
      2 abc
      3 123
[root@jindada ~]# sort  file.txt | uniq  -c | sort  -n
      1 456
      1 edf
      2 abc
      3 123
[root@jindada ~]# sort  file.txt | uniq  -c | sort  -rn
      3 123
      2 abc
      1 edf
      1 456

仅显示指定文件中存在一摸一样内容行的信息

[root@jindada ~]# uniq -d testfile 
test 30  
Hello 95  
Linux 85

仅显示指定文件中没有存在一摸一样内容行的信息:

[root@jindada ~]# uniq -u testfile 

三、常用文件处理命令-cut

1.含义

cut命令的功能是用于按列提取文件内容。常用的grep命令仅能对关键词进行按行提取过滤,而cut命令则是可以根据指定的关键词信息,针对特定的列内容进行过滤。

语法格式:cut [参数] 文件

2.常用参数:

-c 以字符为单位进行分割
-b 以字节为单位进行分割
-d 自定义分隔符,默认为制表符”TAB”
-f 显示指定字段的内容
-n 取消分割多字节字符
--complement 补足被选择的字节、字符或字段
--out-delimiter 指定输出内容是的字段分割符

3.常用示例

[root@jindada ~]# echo "root:x:0:0:root:/root:/bin/bash" >test.txt
[root@jindada ~]# cat test.txt
root:x:0:0:root:/root:/bin/bash

取出第七列

[root@jindada ~]# cut  -d ":"  -f7   test.txt 
/bin/bash

取出第一列和第七列

[root@jindada ~]# cut  -d ":"  -f1,7   test.txt 
root:/bin/bash

取出第五列到第七列

[root@jindada ~]# cut  -d ":"  -f5-7   test.txt 
root:/root:/bin/bash

[root@jindada ~]# cut  -d  ":"  -f7   passwd 
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
[root@jindada ~]# cut  -d  ":"  -f7   passwd  | sort  
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/shutdown
[root@jindada ~]# cut  -d  ":"  -f7   passwd  | sort   | uniq 
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown
[root@jindada ~]# cut  -d  ":"  -f7   passwd  | sort   | uniq  -c
      1 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     14 /sbin/nologin
      1 /sbin/shutdown
[root@jindada ~]# cut  -d  ":"  -f7   passwd  | sort   | uniq  -c | sort -n
      1 /bin/bash
      1 /bin/sync
      1 /sbin/halt
      1 /sbin/shutdown
     14 /sbin/nologin
[root@jindada ~]# cut  -d  ":"  -f7   passwd  | sort   | uniq  -c | sort -rn
     14 /sbin/nologin
      1 /sbin/shutdown
      1 /sbin/halt
      1 /bin/sync
      1 /bin/bash

取出字符

[root@jindada ~]# cat test.txt 
root:x:0:0:root:/root:/bin/bash
[root@jindada ~]# cut  -c 6  test.txt 
x
[root@jindada ~]# cut  -c 6  passwd 
x
:
n
:
4
x
o
x
x
t
#取出不同的字符 
[root@jindada ~]# cut  -c 6,8  test.txt 
x0

#取出连续的字符  
[root@jindada ~]# cut  -c 1-4  test.txt 
root

取出系统eth0的IP地址

[root@jindada ~]# yum install  -y  net-tools

[root@jindada ~]# ifconfig  eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::3310:9d15:9ee4:43e8  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:eb:ea:8d  txqueuelen 1000  (Ethernet)
        RX packets 1634  bytes 464970 (454.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1033  bytes 114568 (111.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@jindada ~]# ifconfig  eth0 | head  -2
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
[root@jindada ~]# ifconfig  eth0 | head  -2 | tail  -1 
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
[root@jindada ~]# ifconfig  eth0 | head  -2 | tail  -1  | cut  -d " "  -f10
10.0.0.100



[root@jindada ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@jindada ~]# ip a s eth0  | head  -3
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0  | head  -3 | tail  -1
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0  | head  -3 | tail  -1 | cut -c 10-19
10.0.0.100



[root@jindada ~]# ip a s eth0  | head  -3 | tail  -1
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0  | head  -3 | tail  -1 | cut  -d " "  -f6
10.0.0.100/24
[root@jindada ~]# ip a s eth0  | head  -3 | tail  -1 | cut  -d " "  -f6 | cut -d "/"  -f1
10.0.0.100

四、常用文件处理命令-tr

1.含义

tr命令来自于英文单词transform的缩写,中文译为转换,其功能是用于字符转换。tr命令是一款批量字符转换、压缩、删除的文本工具,但仅能从标准输入中读取文本内容,需要与管道符或输入重定向操作符搭配使用。

语法格式:tr [参数] 字符串1 字符串2

2.常用参数:

-c 反选字符串1的补集(取反)
-d 删除字符串1中出现的所有字符
-s 删除所有重复出现的字符序列
< 标准输入重定向

3.常用示例

将指定文件中的数字改变输出内容到终端界面

[root@jindada ~]# cat test.txt 
root:x:0:0:root:/root:/bin/bash

[root@jindada ~]# tr  "0"  "9"  < test.txt 
root:x:9:9:root:/root:/bin/bash

删除指定文件中所有的数字后输出内容到终端界面

[root@jindada ~]# tr  -d  "o"  <  test.txt 
rt:x:0:0:rt:/rt:/bin/bash

取出系统eth0的IP地址

[root@jindada ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:eb:ea:8d brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::3310:9d15:9ee4:43e8/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@jindada ~]# ip a s eth0 | head -3 | tail -1
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | tr  '/'  ' '
    inet 10.0.0.100 24 brd 10.0.0.255 scope global noprefixroute eth0
[root@jindada ~]# ip a s eth0 | head -3 | tail -1 | tr  '/'  ' ' | cut  -d " "  -f6
10.0.0.100

五、常用文件处理命令-wc

1.含义

wc命令来自于英文词组“Word count”的缩写,其功能是用于统计文件的字节数、单词数、行数等信息,并将统计结果输出到终端界面。利用wc命令可以很快的计算出准确的单词数及行数,评估出文本的内容长度,要想了解一个文件,不妨先wc一下吧~

语法格式:wc [参数] 文件

2.常用参数:

-w 统计列数,默认以空白字符为分隔符
-c 统计字节数
-l 统计行数
-m 统计字符数
-L 统计文件中最长的行的长度
--help 显示帮助信息
--version 显示版本信息

3.常用示例

统计文件的字节数、单词数、行数

[root@jindada ~]# wc  passwd 
 18  26 798 passwd

统计行数

[root@jindada ~]# wc -l  passwd 
18 passwd

统计指定文件的单词数量

[root@jindada ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@jindada ~]# wc  /etc/hosts
  2  10 158 /etc/hosts
[root@jindada ~]# wc -w  /etc/hosts
10 /etc/hosts

统计指定文件的字节数量

[root@jindada ~]# ll passwd 
-rw-r--r--. 1 root root 798 Jul 13 16:49 passwd
[root@jindada ~]# ll /etc/hosts
-rw-r--r--. 1 root root 158 Jun  7  2013 /etc/hosts
[root@jindada ~]# wc -c  /etc/hosts
158 /etc/hosts
[root@jindada ~]# wc -c  passwd 
798 passwd

统计文件中最长的行的长度

[root@jindada ~]# wc -L  passwd
68 passwd
[root@jindada ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@jindada ~]# wc -L  /etc/hosts
78 /etc/hosts

[root@jindada ~]# name=ewuighrtuighwiorteugh
[root@jindada ~]# echo $name
ewuighrtuighwiorteugh
[root@jindada ~]# echo $name | wc -L
21

统计指定文件的字符数量

[root@jindada ~]# wc -m anaconda-ks.cfg 
1256 anaconda-ks.cfg

统计指定文件的总行数

[root@jindada ~]# wc -l anaconda-ks.cfg 
43 anaconda-ks.cfg
posted @ 2020-07-13 20:50  年少纵马且长歌  阅读(243)  评论(0编辑  收藏  举报