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