ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

16.第五章 文本常见处理工具(二)

2021-10-20 20:02:16  阅读:163  来源: 互联网

标签:sbin txt 16 root nologin 第五章 文本 data rocky8


2.文本常见处理工具

2.1 文件内容查看命令

2.1.1 查看文本文件内容

2.1.1.1 cat

cat 可以查看文本内容

格式:

cat [OPTION]... [FILE]...

常见选项

-E:显示行结束符$
-A:显示所有控制符
-n:对显示出的每一行进行编号
-b:非空行编号
-s:压缩连续的空行成一行

范例:

[root@rocky8 ~]# cat win.txt 
a
b
c[root@rocky8 ~]# cat -A win.txt #-A 查看不可见字符 
a^M$
b^M$
c[root@rocky8 ~]#

[root@rocky8 ~]# cat >a.txt <<EOF
> a
> 
> 
> b
> 
> 
> c
> EOF
[root@rocky8 ~]# cat a.txt 
a


b


c
[root@rocky8 ~]# cat -n a.txt  #-n 显示行号
     1	a
     2	
     3	
     4	b
     5	
     6	
     7	c
[root@rocky8 ~]# cat -b a.txt  #-b  空行不显示行号,只有非空行显示行号
     1	a


     2	b


     3	c
[root@rocky8 ~]# cat -A a.txt 
a$
$
$
b$
$
$
c$
[root@rocky8 ~]# cat -s a.txt  #-s 压缩连续空行为一行
a

b

c
[root@rocky8 ~]# cat -As a.txt 
a$
$
b$
$
c$

范例:

[root@rocky8 data]# vim fa.txt
a b
c 
d	b	c
[root@rocky8 ~]# cat -A fa.txt 
a b$
c $
d^Ib^Ic$
[root@rocky8 ~]# cat fa.txt 
a b
c 
d	b	c
[root@rocky8 ~]# cat fb.txt 
a
b
c
[root@rocky8 ~]# cat -A fb.txt 
a^M$
b^M$
c^M$
[root@rocky8 ~]# he
head     help     hexdump  
[root@rocky8 ~]# hexdump -C fb.txt 
00000000  61 0d 0a 62 0d 0a 63 0d  0a                       |a..b..c..|
00000009
[root@rocky8 ~]# file fb.txt 
fb.txt: ASCII text, with CRLF line terminators

2.1.1.2 nl

显示行号,相当于cat -b

[root@rocky8 ~]# nl a.txt 
     1	a
       
       
     2	b
       
       
     3	c
[root@rocky8 ~]# cat -b a.txt 
     1	a


     2	b


     3	c

2.1.1.3 tac

逆向显示文本内容

[root@rocky8 data]# seq 10 
1
2
3
4
5
6
7
8
9
10
[root@rocky8 data]# seq 10 |tac #tac 把不同行文件倒过来显示
10
9
8
7
6
5
4
3
2
1

[root@rocky8 data]# tac
a
bb
ccc 按ctrl+d
ccc
bb
a

2.1.1.4 rev

将同一行的内容逆向显示

[root@rocky8 data]# echo {a..z}
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@rocky8 data]# echo {a..z} | rev #rev把同一行文件倒过来写
z y x w v u t s r q p o n m l k j i h g f e d c b a

2.1.2 查看非文本文件内容

2.1.2.1 hexdump

范例:

[root@rocky8 data]# hexdump -C -n 512 /dev/sda
00000000  eb 63 90 10 8e d0 bc 00  b0 b8 00 00 8e d8 8e c0  |.c..............|
00000010  fb be 00 7c bf 00 06 b9  00 02 f3 a4 ea 21 06 00  |...|.........!..|
00000020  00 be be 07 38 04 75 0b  83 c6 10 81 fe fe 07 75  |....8.u........u|
00000030  f3 eb 16 b4 02 b0 01 bb  00 7c b2 80 8a 74 01 8b  |.........|...t..|
00000040  4c 02 cd 13 ea 00 7c 00  00 eb fe 00 00 00 00 00  |L.....|.........|
00000050  00 00 00 00 00 00 00 00  00 00 00 80 01 00 00 00  |................|
00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|
00000080  00 20 fb a0 64 7c 3c ff  74 02 88 c2 52 be 05 7c  |. ..d|<.t...R..||
00000090  b4 41 bb aa 55 cd 13 5a  52 72 3d 81 fb 55 aa 75  |.A..U..ZRr=..U.u|
000000a0  37 83 e1 01 74 32 31 c0  89 44 04 40 88 44 ff 89  |7...t21..D.@.D..|
000000b0  44 02 c7 04 10 00 66 8b  1e 5c 7c 66 89 5c 08 66  |D.....f..\|f.\.f|
000000c0  8b 1e 60 7c 66 89 5c 0c  c7 44 06 00 70 b4 42 cd  |..`|f.\..D..p.B.|
000000d0  13 72 05 bb 00 70 eb 76  b4 08 cd 13 73 0d 5a 84  |.r...p.v....s.Z.|
000000e0  d2 0f 83 de 00 be 85 7d  e9 82 00 66 0f b6 c6 88  |.......}...f....|
000000f0  64 ff 40 66 89 44 04 0f  b6 d1 c1 e2 02 88 e8 88  |d.@f.D..........|
00000100  f4 40 89 44 08 0f b6 c2  c0 e8 02 66 89 04 66 a1  |.@.D.......f..f.|
00000110  60 7c 66 09 c0 75 4e 66  a1 5c 7c 66 31 d2 66 f7  |`|f..uNf.\|f1.f.|
00000120  34 88 d1 31 d2 66 f7 74  04 3b 44 08 7d 37 fe c1  |4..1.f.t.;D.}7..|
00000130  88 c5 30 c0 c1 e8 02 08  c1 88 d0 5a 88 c6 bb 00  |..0........Z....|
00000140  70 8e c3 31 db b8 01 02  cd 13 72 1e 8c c3 60 1e  |p..1......r...`.|
00000150  b9 00 01 8e db 31 f6 bf  00 80 8e c6 fc f3 a5 1f  |.....1..........|
00000160  61 ff 26 5a 7c be 80 7d  eb 03 be 8f 7d e8 34 00  |a.&Z|..}....}.4.|
00000170  be 94 7d e8 2e 00 cd 18  eb fe 47 52 55 42 20 00  |..}.......GRUB .|
00000180  47 65 6f 6d 00 48 61 72  64 20 44 69 73 6b 00 52  |Geom.Hard Disk.R|
00000190  65 61 64 00 20 45 72 72  6f 72 0d 0a 00 bb 01 00  |ead. Error......|
000001a0  b4 0e cd 10 ac 3c 00 75  f4 c3 00 00 00 00 00 00  |.....<.u........|
000001b0  00 00 00 00 00 00 00 00  7d 50 d7 43 00 00 80 04  |........}P.C....|
000001c0  01 04 83 fe c2 ff 00 08  00 00 00 00 20 00 00 fe  |............ ...|
000001d0  c2 ff 83 fe c2 ff 00 08  20 00 00 00 80 0c 00 fe  |........ .......|
000001e0  c2 ff 83 fe c2 ff 00 08  a0 0c 00 00 40 06 00 fe  |............@...|
000001f0  c2 ff 05 fe c2 ff 00 08  e0 12 00 f8 1f 06 55 aa  |..............U.|
00000200

[root@rocky8 data]# echo abc | hexdump -C
00000000  61 62 63 0a                                       |abc.|
00000004

[root@rocky8 data]# echo {a..z} | tr -d ' '|hexdump -C
00000000  61 62 63 64 65 66 67 68  69 6a 6b 6c 6d 6e 6f 70  |abcdefghijklmnop|
00000010  71 72 73 74 75 76 77 78  79 7a 0a                 |qrstuvwxyz.|
0000001b

2.1.2.2 od

od 即 dump files in octal and other formats 转储八进制和其他格式的文件

范例:

[root@rocky8 data]# echo {a..z} | tr -d ' '|od -t x
0000000 64636261 68676665 6c6b6a69 706f6e6d
0000020 74737271 78777675 000a7a79
0000033

[root@rocky8 data]# echo {a..z} | tr -d ' '|od -t x1
0000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70
0000020 71 72 73 74 75 76 77 78 79 7a 0a
0000033

[root@rocky8 data]# echo {a..z} | tr -d ' '|od -t x1z
0000000 61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70  >abcdefghijklmnop<
0000020 71 72 73 74 75 76 77 78 79 7a 0a                 >qrstuvwxyz.<
0000033

2.1.2.3 xxd

[root@rocky8 data]# echo {a..z} | tr -d ' '|xxd
00000000: 6162 6364 6566 6768 696a 6b6c 6d6e 6f70  abcdefghijklmnop
00000010: 7172 7374 7576 7778 797a 0a              qrstuvwxyz.

2.2 分页查看文件内容

2.2.1 more

可以实现分页查看文件,可以配合管道实现输出信息的分页

格式

more [OPTIONS...] FILE...

选项:

-d: 显示翻页及退出提示

范例:

[root@rocky8 data]# ls -R /etc | more
/etc:
adjtime
aliases
alternatives
anacrontab
at.deny
audit
authselect
bash_completion.d
bashrc
bindresvport.blacklist
binfmt.d
chkconfig.d
cifs-utils
cron.d
cron.daily
cron.deny
cron.hourly
cron.monthly
crontab
cron.weekly
crypto-policies
crypttab
csh.cshrc
csh.login
dbus-1
--More-- #q 退出

[root@rocky8 data]# ls -R /etc | more -d
/etc:
adjtime
aliases
alternatives
anacrontab
at.deny
audit
authselect
bash_completion.d
bashrc
bindresvport.blacklist
binfmt.d
chkconfig.d
cifs-utils
cron.d
cron.daily
cron.deny
cron.hourly
cron.monthly
crontab
cron.weekly
crypto-policies
crypttab
csh.cshrc
csh.login
dbus-1
--More--[Press space to continue, 'q' to quit.]

2.2.2 less

less 也可以实现分页查看文件或STDIN输出,less 命令是man命令使用的分页器

查看时有用的命令包括:

/文本 向下搜索 文本
/?文本 向上搜索
n/N 跳到下一个 或 上一个匹配

范例:

[root@rocky8 data]# ls -R /etc |less
/etc:
adjtime
aliases
alternatives
anacrontab
at.deny
audit
authselect
bash_completion.d
bashrc
bindresvport.blacklist
binfmt.d
chkconfig.d
cifs-utils
cron.d
cron.daily
cron.deny
cron.hourly
cron.monthly
crontab
cron.weekly
crypto-policies
crypttab
csh.cshrc
csh.login
dbus-1
:

范例:

#less 配合管道对其它命令的执行结果 分页显示
[root@rocky8 data]# tree -d /etc |less
/etc
├── alternatives
├── audit
│   ├── plugins.d
│   └── rules.d
├── authselect
│   └── custom
├── bash_completion.d
├── binfmt.d
├── chkconfig.d
├── cifs-utils
├── cron.d
├── cron.daily
├── cron.hourly
├── cron.monthly
├── cron.weekly
├── crypto-policies
│   ├── back-ends
│   ├── local.d
│   ├── policies
│   │   └── modules
│   └── state
├── dbus-1
│   ├── session.d
│   └── system.d
├── default
: #q 退出

2.3 显示文本前或后行内容

2.3.1 head

可以显示文件或标准输入的前面行

格式:

head [OPTION]... [FILE]...

选项:

-c # 指定获取前#字节
-n # 指定获取前#行
-# 同上

范例:

[root@rocky8 data]# seq 100 |head #head 默认显示文件前10行
1
2
3
4
5
6
7
8
9
10 
[root@rocky8 data]# seq 100 |head -n 3 #-n指定多少行
1
2
3
[root@rocky8 data]# echo {a..z} 
a b c d e f g h i j k l m n o p q r s t u v w x y z
[root@rocky8 data]# echo {a..z} | head -c 5 #-c取前几个字符
a b c[root@rocky8 data]#

[root@rocky8 data]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c10 #取出随机的前10个字符
1HL73ArcyO

[root@rocky8 data]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c10 | tee pass.txt | passwd --stdin raymond #给账户生成一个多位口令的随机密码
Changing password for user raymond.
passwd: all authentication tokens updated successfully.
[root@rocky8 data]# cat pass.txt 
KWENpwZmNs
[root@rocky8 data]# su - boss
Last login: Wed Oct  6 22:15:25 CST 2021 on pts/0
[boss@rocky8 ~]$ su - raymond
Password: 
Last login: Thu Oct  7 20:09:43 CST 2021 on pts/0
[raymond@rocky8 ~]$ exit
logout
[boss@rocky8 ~]$ exit
logout

范例:

[root@rocky8 ~]# head -n 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@rocky8 ~]# 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@rocky8 ~]# echo a我b | head -c4
a我

[root@centos8 ~]#cat /dev/urandom | tr -dc '[:alnum:]'| head -c10
G755MlZatW[root@centos8 ~]#cat /dev/urandom | tr -dc '[:alnum:]'| head -c10
ASsax6DeBz[root@centos8 ~]#cat /dev/urandom | tr -dc '[:alnum:]'| head -c10 | tee
pass.txt | passwd --stdin mage
Changing password for user mage.
passwd: all authentication tokens updated successfully.
[root@centos8 ~]#cat pass.txt
AGT952Essg[root@centos8 ~]#su - wang
[wang@centos8 ~]$su - mage
Password:

[root@rocky8 ~]# seq 10 |head -n 3 #取前3个
1
2
3
[root@rocky8 ~]# seq 10 |head -n -3 #不取最后3个
1
2
3
4
5
6
7

2.3.2 tail

tail 和head 相反,查看文件或标准输入的倒数行

格式:

tail [OPTION]... [FILE]...

选项:

-c # 指定获取后#字节
-n # 指定获取后#行
-# 同上
-f 跟踪显示文件fd新追加的内容,常用日志监控,相当于 --follow=descriptor,当文件删除再新建同名文件,将无法继续跟踪文件
-F 跟踪文件名,相当于--follow=name --retry,当文件删除再新建同名文件,将可以继续跟踪文件

范例:

[root@rocky8 ~]# seq 20 | tail
11
12
13
14
15
16
17
18
19
20
[root@rocky8 ~]# seq 20 | tail -n 3
18
19
20
[root@rocky8 ~]# seq 20 | tail -n +3  #+3  指的是从第三行往后
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@rocky8 ~]# seq 20 | tail -n -3 #-3 最后3个
18
19
20

范例:

[root@rocky8 ~]# tail -3 /var/log/messages 
Oct  7 20:13:37 rocky8 systemd[2857]: Reached target Default.
Oct  7 20:13:37 rocky8 systemd[2857]: Startup finished in 34ms.
Oct  7 20:13:37 rocky8 systemd[1]: Started User Manager for UID 0.

[root@rocky8 ~]# tail -f /var/log/messages  #tail -f跟踪日志信息
Oct  7 20:13:37 rocky8 systemd-logind[854]: New session 7 of user root.
Oct  7 20:13:37 rocky8 systemd[2857]: Reached target Timers.
Oct  7 20:13:37 rocky8 systemd[2857]: Reached target Paths.
Oct  7 20:13:37 rocky8 systemd[2857]: Starting D-Bus User Message Bus Socket.
Oct  7 20:13:37 rocky8 systemd[2857]: Listening on D-Bus User Message Bus Socket.
Oct  7 20:13:37 rocky8 systemd[2857]: Reached target Sockets.
Oct  7 20:13:37 rocky8 systemd[2857]: Reached target Basic System.
Oct  7 20:13:37 rocky8 systemd[2857]: Reached target Default.
Oct  7 20:13:37 rocky8 systemd[2857]: Startup finished in 34ms.
Oct  7 20:13:37 rocky8 systemd[1]: Started User Manager for UID 0.

#只查看最新发生的日志
[root@rocky8 ~]# tail -fn0 /var/log/messages
[root@rocky8 ~]# tail -0f /var/log/messages

[root@rocky8 ~]# ifconfig | head -2 | tail -1
-bash: ifconfig: command not found #最小化安装没有ifconfig命令,安装net-tools工具包
[root@rocky8 ~]# yum -y install net-tools
[root@rocky8 ~]# ifconfig | head -2 | tail -1
        inet 172.31.1.8  netmask 255.255.248.0  broadcast 172.31.7.255

#选择第6行
[root@rocky8 ~]# seq 20| head -n 6|tail -n1
6
[root@rocky8 ~]# seq 20| tail -n +6 |head -n1
6

在这里插入图片描述

2.4 按列抽取文本cut

cut 命令可以提取文本文件或STDIN数据的指定列

格式

cut [OPTION]... [FILE]...

选项

-d DELIMITER: 指明分隔符,默认tab
-f FILEDS:
    #: 第#个字段,例如:3
    #,#[,#]:离散的多个字段,例如:1,3,6
    #-#:连续的多个字段, 例如:1-6
    混合使用:1-3,7
-c 按字符切割
--output-delimiter=STRING指定输出分隔符

范例:

[root@rocky8 ~]# cd /data
[root@rocky8 data]# cp /etc/passwd .
[root@rocky8 data]# cut -d ":" -f 1,3-5 passwd #cut -d 指定分隔符  -f  指定取出第几列
root:0:0:root
bin:1:1:bin
daemon:2:2:daemon
adm:3:4:adm
lp:4:7:lp
sync:5:0:sync
shutdown:6:0:shutdown
halt:7:0:halt
mail:8:12:mail
operator:11:0:operator
games:12:100:games
ftp:14:50:FTP User
nobody:65534:65534:Kernel Overflow User
dbus:81:81:System message bus
systemd-coredump:999:997:systemd Core Dumper
systemd-resolve:193:193:systemd Resolver
tss:59:59:Account used for TPM access
polkitd:998:996:User for polkitd
unbound:997:994:Unbound DNS resolver
sssd:996:993:User for sssd
sshd:74:74:Privilege-separated SSH
postfix:89:89:
raymond:1000:1000:
boss:1001:1001:

[root@rocky8 data]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs          382688       0    382688   0% /dev
tmpfs             400580       0    400580   0% /dev/shm
tmpfs             400580    5692    394888   2% /run
tmpfs             400580       0    400580   0% /sys/fs/cgroup
/dev/sda2      104806400 2320396 102486004   3% /
/dev/sda3       52403200  398416  52004784   1% /data
/dev/sda1        1038336  191796    846540  19% /boot
tmpfs              80116       0     80116   0% /run/user/0
[root@rocky8 data]# df |cut -c 43-46 #-c  按字符取
 Use
   0
   0
   2
   0
   3
   1
  19
   0

[root@rocky8 data]# df |tr -s " "
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 382688 0 382688 0% /dev
tmpfs 400580 0 400580 0% /dev/shm
tmpfs 400580 5692 394888 2% /run
tmpfs 400580 0 400580 0% /sys/fs/cgroup
/dev/sda2 104806400 2320396 102486004 3% /
/dev/sda3 52403200 398416 52004784 1% /data
/dev/sda1 1038336 191796 846540 19% /boot
tmpfs 80116 0 80116 0% /run/user/0
[root@rocky8 data]# df |tr -s " "|cut -d " " -f5
Use%
0%
0%
2%
0%
3%
1%
19%
0%
[root@rocky8 data]# df |tr -s " "|cut -d " " -f5 |tr -d %
Use
0
0
2
0
3
1
19
0
[root@rocky8 data]# df |tr -s " " % |cut -d% -f5
Use
0
0
2
0
3
1
19
0
[root@rocky8 data]# df |tr -s " " % |cut -d% -f5 |tail -n +2
0
0
2
0
3
1
19
0

范例:

[root@rocky8 data]# ifconfig |head -n2 |tail -n1|cut -d" " -f10
172.31.1.8
[root@rocky8 data]# ifconfig |head -n2 |tail -n1|tr -s " " |cut -d " " -f3
172.31.1.8
[root@rocky8 data]# df | tr -s ' '|cut -d' ' -f5 |tr -dc "[0-9\n]"

0
0
2
0
3
1
19
0
[root@rocky8 data]# df | tr -s ' ' % |cut -d% -f5 |tr -d '[:alpha:]'

0
0
2
0
3
1
19
0
[root@rocky8 data]# df | cut -c44-46 |tr -d '[:alpha:]'

  0
  0
  2
  0
  3
  1
 19
  0
[root@rocky8 data]# cut -d: -f1,3,7 --output-delimiter="---" /etc/passwd
root---0---/bin/bash
bin---1---/sbin/nologin
daemon---2---/sbin/nologin
adm---3---/sbin/nologin
lp---4---/sbin/nologin
sync---5---/bin/sync
shutdown---6---/sbin/shutdown
halt---7---/sbin/halt
mail---8---/sbin/nologin
operator---11---/sbin/nologin
games---12---/sbin/nologin
ftp---14---/sbin/nologin
nobody---65534---/sbin/nologin
dbus---81---/sbin/nologin
systemd-coredump---999---/sbin/nologin
systemd-resolve---193---/sbin/nologin
tss---59---/sbin/nologin
polkitd---998---/sbin/nologin
unbound---997---/sbin/nologin
sssd---996---/sbin/nologin
sshd---74---/sbin/nologin
postfix---89---/sbin/nologin
raymond---1000---/bin/bash
boss---1001---/bin/bash

范例: 取分区利用率

#取分区利用率
[root@rocky8 data]# df|tr -s ' ' |cut -d' ' -f5 |tr -d %
Use
0
0
2
0
3
1
19
0

[root@rocky8 data]# df|tr -s ' ' '%'|cut -d% -f5
Use
0
0
2
0
3
1
19
0

[root@rocky8 data]# df |cut -c 44-46|tail -n +2
  0
  0
  2
  0
  3
  1
 19
  0

[root@rocky8 data]# df | tail -n +2|tr -s ' ' % |cut -d% -f5
0
0
2
0
3
1
19
0

[root@rocky8 data]# df | tail -n +2|tr -s ' ' |cut -d' ' -f5 |tr -d %
0
0
2
0
3
1
19
0

2.5 合并多个文件 paste

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

格式

paste [OPTION]... [FILE]...

常用选项:

-d 分隔符:指定分隔符,默认用TAB
-s : 所有行合成一行显示

范例:

[root@rocky8 data]# seq 100 >c.txt
[root@rocky8 data]# paste -s c.txt >f.txt
[root@rocky8 data]# cat f.txt
1	2	3	4	5	6	7	8	9	10	11	12	13	14	15	16	17	18    19	20	21	22	23	24	25	26	27	28	29	30	31	32	33	34	35	36    37	38	39	40	41	42	43	44	45	46	47	48	49	50	51	52	53	54    55	56	57	58	59	60	61	62	63	64	65	66	67	68	69	70	71	72    73	74	75	76	77	78	79	80	81	82	83	84	85	86	87	88	89	90    91	92	93	94	95	96	97	98	99	100
[root@rocky8 data]# cat -A f.txt
1^I2^I3^I4^I5^I6^I7^I8^I9^I10^I11^I12^I13^I14^I15^I16^I17^I18^I19^I20^I21^I22^I23^I24^I25^I26^I27^I28^I29^I30^I31^I32^I33^I34^I35^I36^I37^I38^I39^I40^I41^I42^I43^I44^I45^I46^I47^I48^I49^I50^I51^I52^I53^I54^I55^I56^I57^I58^I59^I60^I61^I62^I63^I64^I65^I66^I67^I68^I69^I70^I71^I72^I73^I74^I75^I76^I77^I78^I79^I80^I81^I82^I83^I84^I85^I86^I87^I88^I89^I90^I91^I92^I93^I94^I95^I96^I97^I98^I99^I100$
[root@rocky8 data]# cat f.txt | tr '\t' '\n'

范例:

[root@rocky8 data]# echo {a..h} | tr -s ' ' '\n' > alpha.log
[root@rocky8 data]# cat alpha.log
a
b
c
d
e
f
g
h
[root@rocky8 data]# seq 5 > seq.log
[root@rocky8 data]# cat seq.log
1
2
3
4
5

[root@rocky8 data]# cat alpha.log seq.log
a
b
c
d
e
f
g
h
1
2
3
4
5

[root@rocky8 data]# paste alpha.log seq.log
a	1
b	2
c	3
d	4
e	5
f	
g	
h	
[root@rocky8 data]# paste -d":" alpha.log seq.log
a:1
b:2
c:3
d:4
e:5
f:
g:
h:

[root@rocky8 data]# paste -s seq.log
1	2	3	4	5
[root@rocky8 data]# paste -s alpha.log
a	b	c	d	e	f	g	h
[root@rocky8 data]# paste -s alpha.log seq.log
a	b	c	d	e	f	g	h
1	2	3	4	5

[root@rocky8 data]# cat > title.txt <<EOF
> ceo
> cto
> coo
> EOF
[root@rocky8 data]# cat title.txt 
ceo
cto
coo

[root@rocky8 data]# cat > emp.txt <<EOF
> zhang
> wang
> li
> zhao
> EOF
[root@rocky8 data]# cat emp.txt 
zhang
wang
li
zhao
[root@rocky8 data]# paste title.txt emp.txt
ceo	zhang
cto	wang
coo	li
	zhao
[root@rocky8 data]# paste -s title.txt emp.txt
ceo	cto	coo
zhang	wang	li	zhao

[root@rocky8 data]# seq 100|paste -d + -s|bc
5050

2.6 分析文本的工具

文本数据统计:wc
整理文本:sort
比较文件:diff和patch

2.6.1 收集文本统计数据 wc

wc 命令可用于统计文件的行总数、单词总数、字节总数和字符总数

可以对文件或STDIN中的数据统计

常用选项

-l 只计数行数
-w 只计数单词总数
-c 只计数字节总数
-m 只计数字符总数
-L 显示文件中最长行的长度

范例:

[root@rocky8 data]# wc c.txt
100 100 292 c.txt
#行数 单词数 字节数
[root@rocky8 data]# ll c.txt
-rw-r--r-- 1 root root 292 Oct  7 20:34 c.txt
[root@rocky8 data]# wc -l c.txt #wc -l显示多少行
100 c.txt
[root@rocky8 data]# cat /etc/passwd |wc -l
24
[root@rocky8 data]# df |tr -s " " % |cut -d% -f5 |tail -n +2 
0
0
2
0
3
1
19
0
[root@rocky8 data]# df |tr -s " " % |cut -d% -f5 |tail -n +2 |wc -l 
8

[root@rocky8 data]# cat > title.txt <<EOF
> ceo zhang
> coo wang
> cto li
> EOF
[root@rocky8 data]# cat > title1.txt <<EOF
> ceo zhang
> coo wang
> cto 老李
> EOF
[root@rocky8 data]# ll title.txt title1.txt 
-rw-r--r-- 1 root root 30 Oct  7 20:51 title1.txt
-rw-r--r-- 1 root root 26 Oct  7 20:50 title.txt
[root@rocky8 data]# wc title.txt 
 3  6 26 title.txt
[root@rocky8 data]# wc title1.txt 
 3  6 30 title1.txt

[root@rocky8 data]# wc -l title.txt 
3 title.txt
[root@rocky8 data]# cat title.txt | wc -l
3

[root@rocky8 data]# df | tail -n $(echo `df | wc -l`-1|bc)
devtmpfs          382688       0    382688   0% /dev
tmpfs             400580       0    400580   0% /dev/shm
tmpfs             400580    5692    394888   2% /run
tmpfs             400580       0    400580   0% /sys/fs/cgroup
/dev/sda2      104806400 2320316 102486084   3% /
/dev/sda3       52403200  398444  52004756   1% /data
/dev/sda1        1038336  191796    846540  19% /boot
tmpfs              80116       0     80116   0% /run/user/0

2.6.2 文本排序 sort

把整理过的文本显示在STDOUT,不改变原始文件

格式:

sort [options] file(s)

常用选项

-r 执行反方向(由上至下)整理
-R 随机排序
-n 执行按数字大小整理
-f 选项忽略(fold)字符串中的字符大小写
-u 选项(独特,unique),合并重复项,即去重
-t c 选项使用c做为字段界定符
-k # 选项按照使用c字符分隔的 # 列来整理能够使用多次

范例:

[root@rocky8 data]# sort /etc/passwd #sort 默认按照字符顺序排序
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
boss:x:1001:1001::/home/boss:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
raymond:x:1000:1000::/home/raymond:/bin/bash
root:x:0:0:root:/root:/bin/bash
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
sssd:x:996:993:User for sssd:/:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin

[root@rocky8 data]# sort -t: -k3 /etc/passwd #-t 指定分隔符  -k 指定第几列 默认是按字符排列
root:x:0:0:root:/root:/bin/bash
raymond:x:1000:1000::/home/raymond:/bin/bash
boss:x:1001:1001::/home/boss:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/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
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sssd:x:996:993:User for sssd:/:/sbin/nologin
unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin

[root@rocky8 data]# sort -t: -k3 -n /etc/passwd #-n  按数字排列
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
tss:x:59:59:Account used for TPM access:/dev/null:/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
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
sssd:x:996:993:User for sssd:/:/sbin/nologin
unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
raymond:x:1000:1000::/home/raymond:/bin/bash
boss:x:1001:1001::/home/boss:/bin/bash
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin

[root@rocky8 data]# sort -t: -k3 -nr /etc/passwd #-r 倒序排列
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
boss:x:1001:1001::/home/boss:/bin/bash
raymond:x:1000:1000::/home/raymond:/bin/bash
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
unbound:x:997:994:Unbound DNS resolver:/etc/unbound:/sbin/nologin
sssd:x:996:993:User for sssd:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
sync:x:5:0:sync:/sbin:/bin/sync
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash

[root@rocky8 data]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs          382688       0    382688   0% /dev
tmpfs             400580       0    400580   0% /dev/shm
tmpfs             400580    5692    394888   2% /run
tmpfs             400580       0    400580   0% /sys/fs/cgroup
/dev/sda2      104806400 2320316 102486084   3% /
/dev/sda3       52403200  398444  52004756   1% /data
/dev/sda1        1038336  191796    846540  19% /boot
tmpfs              80116       0     80116   0% /run/user/0
[root@rocky8 data]# df |tr -s ' ' '%' |cut -d% -f5
Use
0
0
2
0
3
1
19
0
[root@rocky8 data]# df |tr -s ' ' '%' |cut -d% -f5 |tail -n +2
0
0
2
0
3
1
19
0
[root@rocky8 data]# df |tr -s ' ' '%' |cut -d% -f5 |tail -n +2 |sort -nr
19
3
2
1
0
0
0
0
[root@rocky8 data]# df |tr -s ' ' '%' |cut -d% -f5 |tail -n +2 |sort -nr |head -1
19

[root@rocky8 data]# cat >aa.txt <<EOF
> a
> b
> a
> c
> a
> c
> b
> EOF
[root@rocky8 data]# sort aa.txt
a
a
a
b
b
c
c
[root@rocky8 data]# sort -u aa.txt #-u  去重
a
b
c

范例:

[root@rocky8 data]# cut -d: -f1,3 /etc/passwd|sort -t: -k2 -nr |head -n3
nobody:65534
boss:1001
raymond:1000

#统计日志访问量
[root@rocky8 data]# cut -d" " -f1 access_log |sort -u|wc -l
201

范例:统计分区利用率

[root@rocky8 data]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
devtmpfs          382688       0    382688   0% /dev
tmpfs             400580       0    400580   0% /dev/shm
tmpfs             400580    5692    394888   2% /run
tmpfs             400580       0    400580   0% /sys/fs/cgroup
/dev/sda2      104806400 2320316 102486084   3% /
/dev/sda3       52403200  407316  51995884   1% /data
/dev/sda1        1038336  191796    846540  19% /boot
tmpfs              80116       0     80116   0% /run/user/0

#查看分区利用率最高值
[root@rocky8 data]# df| tr -s ' ' '%'|cut -d% -f5|sort -nr|head -1
19

[root@rocky8 data]# df | tr -s " " %|cut -d% -f5|tr -d '[:alpha:]' | sort

0
0
0
0
1
19
2
3
[root@rocky8 data]# df | tr -s " " %|cut -d% -f5|tr -d '[:alpha:]' | sort -n

0
0
0
0
1
2
3
19
[root@rocky8 data]# df | tr -s " " %|cut -d% -f5|tr -d '[:alpha:]' | sort -n |tail -n1
19

[root@centos8 ~]#df | tr -s " " %|cut -d% -f5|tr -d '[:alpha:]' | sort -nr
15
5
1
1
1
0
0
0

[root@rocky8 data]# df | tr -s " " %|cut -d% -f5|tr -d '[:alpha:]' | sort -nr |head -1
19

面试题:有两个文件,a.txt与b.txt ,合并两个文件,并输出时确保每个数字也唯一

#a.txt中的每一个数字在本文件唯一
200
100
34556
23
...

#b.txt中的每一个数字在本文件唯一
123
43
200
3321
...

#就是将两个文件合并后重复的行去除,不保留
100
345563
123
43
3321
...

2.6.3 去重uniq

uniq命令从输入中删除前后相接的重复的行

格式:

uniq [OPTION]... [FILE]...

常见选项:

-c: 显示每行重复出现的次数
-d: 仅显示重复过的行
-u: 仅显示不曾重复的行

uniq常和sort 命令一起配合使用:

范例:

[root@rocky8 data]# cat > aa.txt <<EOF
> a
> b
> a
> a
> c
> c
> a
> c
> b
> b
> EOF
[root@rocky8 data]# cat aa.txt 
a
b
a
a
c
c
a
c
b
b
[root@rocky8 data]# uniq aa.txt  #uniq 去掉相邻的重复字符
a
b
a
c
a
c
b
[root@rocky8 data]# uniq -c aa.txt #-c  重复几次
      1 a
      1 b
      2 a
      2 c
      1 a
      1 c
      2 b

[root@rocky8 data]# cat aa.txt 
a
b
a
a
c
c
a
c
b
b
[root@rocky8 data]# sort aa.txt 
a
a
a
a
b
b
b
c
c
c
[root@rocky8 data]# sort aa.txt | uniq  -c #统计重复几次
      4 a
      3 b
      3 c
[root@rocky8 data]#  sort aa.txt |uniq -c|sort -nr
      4 a
      3 c
      3 b
[root@rocky8 data]#  sort aa.txt |uniq -c|sort -nr | head -1
      4 a

范例:

sort userlist.txt | uniq -c

范例:统计日志访问量最多的请求

[root@rocky8 data]# cut -d" " -f1 access_log |sort |uniq -c|sort -nr |head -3
   4870 172.20.116.228
   3429 172.20.116.208
   2834 172.20.0.222

[root@10-9-24-182 ~]# lastb |tr -s ' ' |cut -d ' ' -f3 |sort |uniq -c |sort -nr |head -3
  34096 113.141.66.163
  24460 222.186.10.188
  16449 119.118.20.161

范例:并发连接最多的远程主机IP

[root@rocky8 data]# ss -nt |tail -n +2 |tr -s ' ' : |cut -d: -f6 |sort |uniq -c |sort -nr |head -2
	7 10.0.0.1
	2 10.0.0.7

范例:取两个文件的相同和不同的行

[root@rocky8 data]# cat > test1.txt <<EOF
> a
> b
> 1
> c
> EOF
[root@rocky8 data]# cat test1.txt
a
b
1
c

[root@rocky8 data]# cat > test2.txt <<EOF
> b
> e
> f
> c
> 1
> 2
> EOF
[root@rocky8 data]# cat test2.txt 
b
e
f
c
1
2

#取文件的共同行
[root@rocky8 data]# cat test1.txt test2.txt | sort |uniq -d
1
b
c

#取文件的不同行
[root@rocky8 data]# cat test1.txt test2.txt | sort |uniq -u
2
a
e
f

2.6.4 比较文件

2.6.4.1 diff

diff 命令比较两个文件之间的区别,diff 命令的输出可被保存在一种叫做“补丁”的文件中

常用选项

-u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件

范例:

[root@rocky8 data]# cat > f1.txt <<EOF
> zhang
> wang
> li
> zhao
> EOF
[root@rocky8 data]# cat f1.txt 
zhang
wang
li
zhao
[root@rocky8 data]# cat > f2.txt <<EOF
> zhangliang
> wangsir
> li
> zhao
> gao
> EOF
[root@rocky8 data]# cat f2.txt 
zhangliang
wangsir
li
zhao
gao

[root@rocky8 data]# diff f1.txt f2.txt 
1,2c1,2
< zhang
< wang
---
> zhangliang
> wangsir
4a5
> gao

[root@rocky8 data]# diff -u f1.txt f2.txt 
--- f1.txt	2021-10-07 21:30:15.134764613 +0800
+++ f2.txt	2021-10-07 21:31:20.962768219 +0800
@@ -1,4 +1,5 @@
-zhang
-wang
+zhangliang
+wangsir
 li
 zhao
+gao

[root@centos8 ~]#diff -u f1.txt f2.txt > f.patch
[root@rocky8 data]# diff -u f1.txt f2.txt > f.patch
[root@rocky8 data]# rm -f f2.txt
[root@rocky8 data]# patch -b f1.txt f.patch #这里恢复会把f2.txt 恢复成f1.txt,使用-b恢复前先把f1.txt备份成f1.txt.orig ,恢复的文件f1.txt就是原来f2.txt文件
patching file f1.txt
[root@rocky8 data]# cat f1.txt
zhangliang
wangsir
li
zhao
gao
[root@rocky8 data]# cat f1.txt.orig 
zhang
wang
li
zhao

2.6.4.2 patch

patch 复制在其它文件中进行的改变(要谨慎使用)

常用选项:

-b 选项来自动备份改变了的文件

范例:

diff -u foo.conf foo2.conf > foo.patch
patch -b foo.conf foo.patch

2.7 练习

1、找出ifconfig “网卡名” 命令结果中本机的IPv4地址
2、查出分区空间使用率的最大百分比值
3、查出用户UID最大值的用户名、UID及shell类型
4、查出/tmp的权限,以数字方式显示
5、统计当前连接本机的每个远程主机IP的连接数,并按从大到小排序

标签:sbin,txt,16,root,nologin,第五章,文本,data,rocky8
来源: https://blog.csdn.net/qq_25599925/article/details/120810532

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有