Linux-文本处理

Linux-文本处理

文本处理

cut

截取文本内容(只好取规则的文本)

-d 指定字段分隔符,默认是空格

-f 指定要显示的字段

[root@localhost ~]# cp /etc/passwd .
[root@localhost ~]# cut -d: -f1,3 passwd |head -3		// 只取第一列和第三列
root:0
bin:1
daemon:2
[root@localhost ~]# cut -d: -f1-3 passwd |head -3		// 只取第一到三列
root:x:0
bin:x:1
daemon:x:2

awk 基于列的文本报告工具

-F 分隔符

[root@localhost ~]# awk -F: '{print $1,$3}' passwd |head -3	  //","表示空格
root 0
bin 1
daemon 2
[root@localhost ~]# awk -F: '{print $1":"$3}' passwd |head -3
root:0
bin:1
daemon:2
[root@localhost ~]# df -h|awk '{print $4}'|head -3			// 表示取第4列的内容
Avail
1.9G
1.9G
[root@localhost ~]# df -h|awk '{print $NF}'|head -3			// $NF表示最后一列
on
/dev
/dev/shm3
[root@localhost ~]# df -h|awk '{print $(NF-1)}'|head -3		// $(NF-1)表示倒数第二列
Mounted
0%
0%
[root@localhost ~]# df -h|awk 'NR==2{print $4}'				// NR表示行
1.9G														// 表示取第二行第四列的内容

sed

基于行的过滤和转换文本的流编辑器

默认只展示效果并不更改文件

[root@localhost ~]# sed 's/123/456/g' yqh		// g表示更改所有匹配的内容
xx:456:456
[root@localhost ~]# cat yqh
xx:123:123

-i 确认更改文件

[root@localhost ~]# sed -i 's/123/456/g' yqh	
[root@localhost ~]# cat yqh
xx:456:456

g可以为任意数,指定更改第任意个值

[root@localhost ~]# sed 's/123/456/1' yqh	
[root@localhost ~]# cat yqh
xx:445566:112233

添加内容

[root@localhost ~]# sed -i '1aLinux' yqh		// 1a表示在第一行后面添加
[root@localhost ~]# cat yqh
xx:123:123
Linux
[root@localhost ~]# sed '/^xx/aStudy' yqh		// ^xx表示定位到某一行
xx:123:123
Study
Linux

插入内容

[root@localhost ~]# sed '1iOne' yqh			// 1i表示在第一行插入
One
xx:123:123
Linux

更改内容

[root@localhost ~]# sed '1iOne' yqh			// 1c表示更改第一行内容
One
Linux

删除内容

[root@localhost ~]# sed '1d' yqh			// 1d表示删除第一行内容
Linux

打印内容

[root@localhost ~]# sed -n '1p' yqh			// 1p表示打印第一行内容
xx:112233:112233							// -n表示关闭默认打印全局功能

cat

拼接文件内容并输出至标准输出

//用cat创建文件
[root@localhost ~]# cat > abc <<EOF			// EOF表示开始和结束的标志 需要相对应
> 1 3 5
> 4 3 2
> 2 7 9
> 10 11 23
> 1 3 5
> 4 3 2
> EOF

文本排序

sort

默认是升序排序,不按数值大小排序,分隔符默认是空格

将文件的每一行作为一个单位相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出

[root@localhost ~]# cat abc
1 3 5
4 3 2
2 7 9
10 11 23
1 3 5
4 3 2
[root@localhost ~]# sort abc
10 11 23
1 3 5
1 3 5
2 7 9
4 3 2
4 3 2

按数值大小排序

[root@localhost ~]# sort -n abc				// -n表示按数值从小到大排序
1 3 5
1 3 5
2 7 9
4 3 2
4 3 2
10 11 23
[root@localhost ~]# sort -nr abc			// -nr表示按数值从大到小排序
10 11 23
4 3 2
4 3 2
2 7 9
1 3 5
1 3 5

指定列排序

[root@localhost ~]# sort -nk2 abc			// -nk2表示按第二列数值从小到大排序
1 3 5
1 3 5
4 3 2
4 3 2
2 7 9
10 11 23

去重,排序后相同的行只显示一次

[root@localhost ~]# sort -nu abc		   // -u表示去重 -nu表示数值从大到小排序并去重
1 3 5
2 7 9
4 3 2
10 11 23

当文件不规律时,指定分隔符定位排序

[root@localhost ~]# cat bcd
zhangsan:x:5:4:zhangsan:/root
lisi:x:1:2:lisi:/root
wangwu:x:0:1:wangwu:/root
xiaoming:x:9:8:xiaoming:/root
xiaohong:x:6:6:xiaohong:/root
[root@localhost ~]# sort -n -t: -k3 bcd			// -n -t: -k3表示以“:”为分隔符定位
wangwu:x:0:1:wangwu:/root						// 并按第三列数值从小到大排序
lisi:x:1:2:lisi:/root
zhangsan:x:5:4:zhangsan:/root
xiaohong:x:6:6:xiaohong:/root
xiaoming:x:9:8:xiaoming:/root

uniq

统计连续出现重复的行 (需要先排序再使用)

显示文件中行重复的次数

[root@localhost ~]# sort -n abc|uniq -c			// -c表示统计重复的次数
      2 1 3 5									// 第一列数值表示重复的次数
      1 2 7 9
      2 4 3 2
      1 10 11 23

只显示重复的行

[root@localhost ~]# sort -n abc|uniq -d			// -d表示只显示重复的行
1 3 5
4 3 2

wc (word count)

统计单词

[root@localhost ~]# cat abc
1 3 5
4 3 2
2 7 9
10 11 23
1 3 5
4 3 2
[root@localhost ~]# wc abc
 6 18 39 abc
[root@localhost ~]# cat abc|wc -l			// -l表示只显示行数
6
[root@localhost ~]# cat abc|wc -w			// -w表示只显示单词数
18
[root@localhost ~]# cat abc|wc -c			// -c表示只显示字节数
39

大小统计

du

查看文件或目录占用的磁盘空间大小

[root@localhost ~]# du abc
4	abc

生成一个1G名叫test文件

[root@localhost ~]# dd if=/dev/zero of=test bs=1024M count=1	
1+0 records in						///dev/zero是吐零设备
1+0 records out						///dev/null是黑洞设备
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 41.3415 s, 26.0 MB/s
[root@localhost ~]# du test
1048576	test

以人类友好的方式显示大小

[root@localhost ~]# du -h test				// -h是human-readable可读的
1.0G	test

显示总的占用空间大小

[root@localhost ~]# du -s /root
1048616	/root

组合

[root@localhost ~]# du -sh test /root
1.0G	test
40K		/root

df

报告文件系统磁盘空间使用情况

[root@localhost ~]# df
Filesystem            1K-blocks    Used Available Use% Mounted on
devtmpfs                1903220       0   1903220   0% /dev
tmpfs                   1921028       0   1921028   0% /dev/shm
tmpfs                   1921028    9072   1911956   1% /run
tmpfs                   1921028       0   1921028   0% /sys/fs/cgroup
/dev/mapper/rhel-root  52403200 2733960  49669240   6% /
/dev/mapper/rhel-home  47212008  362212  46849796   1% /home
/dev/sda1               1038336  182860    855476  18% /boot
tmpfs                    384204       0    384204   0% /run/user/0

主机名管理

hostname

查看或临时修改主机名,重开终端有效,重启失效

目录在/etc/hostname,实际是修改这个

[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# hostname yqh
[root@localhost ~]# bash
[root@yqh ~]# reboot
[root@localhost ~]#

hostname

查看或永久修改主机名,重开终端生效,重启依然有效

[root@localhost ~]# hostnamectl set-hostname yqh
[root@localhost ~]# bash
[root@yqh ~]# reboot
[root@yqh ~]#

其他

time

显示命令的执行时间

[root@yqh ~]# time cat /etc/hostname
yqh

real	0m0.001s								//真正执行的时间
user	0m0.000s
sys		0m0.001s

clear

清屏(快捷键:Ctrl+L)

[root@yqh ~]# clear

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

[root@yqh ~]# 

whoami

显示当前登录用户

w

显示当前在线用户并显示其在运行的命令

who

查看当前在线用户

[root@yqh ~]# whoami
root
[root@yqh ~]# w
 16:52:46 up  5:31,  4 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     -                Tue14   28:28   0.18s  0.18s -bash
root     pts/0    192.168.21.1     16:24    0.00s  0.03s  0.00s w
root     pts/1    192.168.21.1     16:49   14.00s  0.02s  0.01s vi abc
root     pts/2    192.168.21.1     16:49    3.00s  0.00s  0.00s vi yqh
[root@yqh ~]# who
root     tty1         2020-11-03 14:37
root     pts/0        2020-11-05 16:24 (192.168.21.1)
root     pts/1        2020-11-05 16:49 (192.168.21.1)
root     pts/2        2020-11-05 16:49 (192.168.21.1)

which

显示指定命令的绝对路径

[root@yqh ~]# which ls
alias ls='ls --color=auto'
	/usr/bin/ls

date

显示或设置日期与时间,不带参数的date用于显示当前系统日期与时间

[root@yqh ~]# date
Thu Nov  5 16:54:29 CST 2020
[root@yqh ~]# date -s '2020-11-5 17:20:00'				// -s以字符串方式设置时间
Thu Nov  5 17:20:00 CST 2020
[root@yqh ~]# date '+%Y'								// 年
2020
[root@yqh ~]# date '+%m'								// 月
11
[root@yqh ~]# date '+%d'								// 日
05
[root@yqh ~]# date '+%H'								// 时
16
[root@yqh ~]# date '+%M'								// 分
57
[root@yqh ~]# date '+%S'								// 秒
38

创建以当前日期为命名的文件

[root@yqh ~]# mkdir $(date '+%Y%m%d')
[root@yqh ~]# ls
20201105  abc  anaconda-ks.cfg  bcd  passwd  test
[root@yqh ~]# mkdir abc-$(date '+%H%M%S')
[root@yqh ~]# ls
20201105  abc  abc-170012  anaconda-ks.cfg  bcd  passwd  test

cal 打印日历

[root@yqh ~]# cal
    November 2020   
Su Mo Tu We Th Fr Sa
 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               
                    
[root@yqh ~]# cal 9999							//打印9999年的日历
                               9999                               

       January               February                 March       
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2       1  2  3  4  5  6       1  2  3  4  5  6
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    7  8  9 10 11 12 13
10 11 12 13 14 15 16   14 15 16 17 18 19 20   14 15 16 17 18 19 20
17 18 19 20 21 22 23   21 22 23 24 25 26 27   21 22 23 24 25 26 27
24 25 26 27 28 29 30   28                     28 29 30 31         
31                                                                
        April                   May                   June        
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
             1  2  3                      1          1  2  3  4  5
 4  5  6  7  8  9 10    2  3  4  5  6  7  8    6  7  8  9 10 11 12
11 12 13 14 15 16 17    9 10 11 12 13 14 15   13 14 15 16 17 18 19
18 19 20 21 22 23 24   16 17 18 19 20 21 22   20 21 22 23 24 25 26
25 26 27 28 29 30      23 24 25 26 27 28 29   27 28 29 30         
                       30 31                                      
        July                  August                September     
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
             1  2  3    1  2  3  4  5  6  7             1  2  3  4
 4  5  6  7  8  9 10    8  9 10 11 12 13 14    5  6  7  8  9 10 11
11 12 13 14 15 16 17   15 16 17 18 19 20 21   12 13 14 15 16 17 18
18 19 20 21 22 23 24   22 23 24 25 26 27 28   19 20 21 22 23 24 25
25 26 27 28 29 30 31   29 30 31               26 27 28 29 30      
                                                                  
       October               November               December      
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
                1  2       1  2  3  4  5  6             1  2  3  4
 3  4  5  6  7  8  9    7  8  9 10 11 12 13    5  6  7  8  9 10 11
10 11 12 13 14 15 16   14 15 16 17 18 19 20   12 13 14 15 16 17 18
17 18 19 20 21 22 23   21 22 23 24 25 26 27   19 20 21 22 23 24 25
24 25 26 27 28 29 30   28 29 30               26 27 28 29 30 31   
31                                                                

bc 数学运算时保留小数

安装bc

[root@yqh ~]# mount /dev/cdrom /mnt
mount: /mnt: WARNING: device write-protected, mounted read-only.
[root@yqh ~]# rpm -ivh /mnt/BaseOS/Packages/bc-1.07.1-5.el8.x86_64.rpm 
warning: /mnt/BaseOS/Packages/bc-1.07.1-5.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:bc-1.07.1-5.el8                  ################################# [100%]
[root@yqh ~]# which bc
/usr/bin/bc

保留小数后几位

[root@yqh ~]# echo 'scale=2;5/2'|bc	-l				// 计算5除以2保留2位小数
2.50
[root@yqh ~]# echo 'scale=5;2/5'|bc -l				// 计算2除以5保留5位小数
.40000

ldd

查看指定程序有哪些依赖库文件

[root@yqh ~]# ldd /usr/bin/ls
	linux-vdso.so.1 (0x00007fff3af6b000)
	libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fd086bbe000)
	libcap.so.2 => /lib64/libcap.so.2 (0x00007fd0869b8000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fd0865f6000)
	libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007fd086372000)
	libdl.so.2 => /lib64/libdl.so.2 (0x00007fd08616e000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fd08700c000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fd085f4e000)

移走依赖库文件

[root@yqh ~]# mv /lib64/libselinux.so.1  /opt
[root@yqh ~]# ls
ls: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory						// 移走后无法使用ls命令
[root@yqh ~]# mv /opt/libselinux.so.1 /lib64/
mv: error while loading shared libraries: libselinux.so.1: cannot open shared object file: No such file or directory						// mv命令也用不了
[root@yqh ~]# ldd /usr/bin/ls
	linux-vdso.so.1 (0x00007ffd3c51b000)
	libselinux.so.1 => not found
	libcap.so.2 => /lib64/libcap.so.2 (0x00007fef86f25000)
	libc.so.6 => /lib64/libc.so.6 (0x00007fef86b63000)
	/lib64/ld-linux-x86-64.so.2 (0x00007fef8734e000)

软链接

[root@yqh ~]# ln /opt/libselinux.so.1  /lib64/
[root@yqh ~]# ls
20201105  abc  abc-170012  anaconda-ks.cfg  bcd  passwd  test
原文地址:https://www.cnblogs.com/yuqinghao/p/13993945.html