第10章 Shell工具(重点)

第10章  Shell工具(重点)

10.1 cut

  cut的工作就是“剪切”,具体地说就是在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出

  1.基本语法

  cut [选项参数] filename

  说明:默认分隔符是制表符

  2.选项参数说明

  -f  列号,提取第几列

  -d  分隔符,按照指定分隔符分割列

  3.案例实操

  (0)数据准备

[root@localhost ~]# touch cut.txt
[root@localhost ~]# vim cut.txt

di di
yi er
lie lie

  (1)切割cut.txt第一列

[root@localhost ~]# cut -d " " -f 1 cut.txt
di
yi
lie

  (2)切割cut.txt第二、三列

[root@localhost ~]# cut -d " " -f 2,3 cut.txt
di
er
lie

  (3)在cut.txt文件中切割出er

[root@localhost ~]# cat cut.txt | grep er | cut -d " " -f 2
er

  (4)选取系统变量PATH值,第2个“:”开始后的所有路径

[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo $PATH | cut -d ":" -f 2-
/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# echo $PATH | cut -d ":" -f 3-
/usr/sbin:/usr/bin:/root/bin

  (5)切割ifconfig后打印的IP地址

[root@localhost ~]# ifconfig | grep broadcast | tr -s " " | cut -d " " -f 3
192.168.40.135

10.2 sed

  sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出

  1.基本用法

  sed [选项参数] 'command' filename

  2.选项参数说明

  -e  直接在指令列模式上进行sed的动作编辑

  3.命令功能描述

  a  新增,a的后面可以接字符串,在下一行出现

  d  删除

  s  查找并替换

  4.案例实操

  (0)数据准备

[root@localhost ~]# touch sed.txt
[root@localhost ~]# vim sed.txt

第 第
一 二
列 列

  (1)将“三 四”这个单词插入sed第二行下,打印

[root@localhost ~]# sed "2a 三 四" sed.txt
第 第
一 二
三 四
列 列

[root@localhost ~]# cat sed.txt
第 第
一 二
列 列

  注意:文件并没有改变

  (2)删除sed.txt文件所有包含“列”的行

[root@localhost ~]# sed "/列/d" sed.txt
第 第
一 二

  (3)将sed.txt文件中所有的“列”替换“行”

[root@localhost ~]# sed "s/列/行/g" sed.txt
第 第
一 二
行 行

  注意:"g"表示global,全部替换

  (4)将sed.txt文件中的第二行删除并将"列"替换为"行"

[root@localhost ~]# sed -e "2d" -e "s/列/行/g" sed.txt
第 第
行 行

10.3 awk

  一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理

  1.基本语法

  awk [选项参数] 'pattern1 {action1} pattern2 {action2}...' filename

  pattern:表示awk在数据中查找的内容,就是匹配模式

  action:在找到匹配内容时所执行的一系列内容

  2.选项参数说明

  -F  指定输入文件拆分分隔符

  -v  复制一个用户自定义变量

  3.案例实操

  (0)数据准备

[root@localhost ~]# cp /etc/passwd ./

  (1)搜索passwd文件以root关键字开头的所有行,并输出改行的第7列

[root@localhost ~]# awk -F: '/^root/{print $7}' passwd
/bin/bash

  (2)搜索passwd文件以root关键字开头的所有行,并输出改行的第1列和第7列,中间以”,“号分割

[root@localhost ~]# awk -F: '/^root/{print $1","$7}' passwd
root,/bin/bash

  注意:只有匹配了pattern的行才会执行action

  (3)只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行面前添加列名user,shell在最后一行添加”dahaige,/bin/zuishuai"

[root@localhost ~]# awk -F: 'BEGIN{print "user,shell"}{print $1","$7}END{print "dahaige,/bin/zuishuai"}' passwd
user,shell
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
......
ntp,/sbin/nologin
chrony,/sbin/nologin
tcpdump,/sbin/nologin
dahaige,/bin/zuishuai

  注意:BEGIN在所有数据读取行之前执行;END在所有数据执行之后执行

  (4)将passwd文件中的用户id增加数值1并输出

[root@localhost ~]# awk -v i=1 -F: '{print $3+i}' passwd
1
2
3
4
5
6
7
8
9
12
13
15
100
193
82
1000
999
174
33
75
90
39
998
73

  4.awk的内置变量

  FILENAME  文件名

  NR      已读的记录数

  NF      浏览记录的域的个数(切割后,列的个数)

  5.案例实操

  (1)统计passwd文件号,每行的行号,每行的列数

[root@localhost ~]# awk -F: '{print "filename:" FILENAME ", linenumber:" NR ",columns:" NF}' passwd
filename:passwd, linenumber:1,columns:7
filename:passwd, linenumber:2,columns:7
filename:passwd, linenumber:3,columns:7
filename:passwd, linenumber:4,columns:7
filename:passwd, linenumber:5,columns:7
filename:passwd, linenumber:6,columns:7
filename:passwd, linenumber:7,columns:7
filename:passwd, linenumber:8,columns:7
filename:passwd, linenumber:9,columns:7
filename:passwd, linenumber:10,columns:7
filename:passwd, linenumber:11,columns:7
filename:passwd, linenumber:12,columns:7
filename:passwd, linenumber:13,columns:7
filename:passwd, linenumber:14,columns:7
filename:passwd, linenumber:15,columns:7
filename:passwd, linenumber:16,columns:7
filename:passwd, linenumber:17,columns:7
filename:passwd, linenumber:18,columns:7
filename:passwd, linenumber:19,columns:7
filename:passwd, linenumber:20,columns:7
filename:passwd, linenumber:21,columns:7
filename:passwd, linenumber:22,columns:7
filename:passwd, linenumber:23,columns:7
filename:passwd, linenumber:24,columns:7

  (2)切割IP

[root@localhost ~]# ifconfig ens33 | grep "broadcast" | awk '{print $2}'
192.168.40.135

10.4 sort

  sort命令在Linux里非常有用,它将文件进行排序,并将排序结果标准输出

  sort(选项)(参数)

  -n  依照熟知的大小排序

  -r  以相反的顺序来排序

  -t  设置排序时所用的分割字符

  -k  指定需要排序的列

  参数:指定待排序的文件列表

  2.案例实操

  (1)查看当前使用内存最多的前10个进程

[root@localhost ~]# ps -aux | sort -k4rn | head -n 10
root 6498 0.0 1.9 573820 19276 ? Ssl 19:32 0:01 /usr/bin/python2 -Es /usr/sbin/tuned -l -P
polkitd 6148 0.0 1.1 614312 11148 ? Ssl 19:32 0:00 /usr/lib/polkit-1/polkitd --no-debug
root 6143 0.0 0.8 697264 8940 ? Ssl 19:32 0:00 /usr/sbin/NetworkManager --no-daemon
root 6137 0.0 0.6 99564 6112 ? Ss 19:32 0:00 /usr/bin/VGAuthService -s
root 6147 0.0 0.6 300936 6492 ? Ssl 19:32 0:05 /usr/bin/vmtoolsd
root 6759 0.0 0.6 161644 6776 ? Ss 19:32 0:00 sshd: root@pts/0
root 6761 0.0 0.6 161296 6236 ? Ss 19:32 0:00 sshd: root@notty
root 6139 0.0 0.5 228124 5688 ? Ss 19:32 0:00 /usr/sbin/abrtd -d -s
root 6234 0.0 0.5 107356 5476 ? S 19:32 0:00 /sbin/dhclient -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-ens33.pid -lf /var/lib/NetworkManager/dhclient-fe29d610-e38b-461b-8c97-9493c2ef79ac-ens33.lease -cf /var/lib/NetworkManager/dhclient-ens33.conf ens33
postfix 6631 0.0 0.4 91732 4080 ? S 19:32 0:00 pickup -l -t unix -u

  (2)查看当前使用CPU最多的10个进程

[root@localhost ~]# ps -aux | sort -k3rn | head -n 10
dbus 6128 0.0 0.2 60324 2552 ? Ss 19:32 0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
libstor+ 6138 0.0 0.0 8576 824 ? Ss 19:32 0:00 /usr/bin/lsmd -d
polkitd 6148 0.0 1.1 614312 11148 ? Ssl 19:32 0:00 /usr/lib/polkit-1/polkitd --no-debug
postfix 6631 0.0 0.4 91732 4080 ? S 19:32 0:00 pickup -l -t unix -u
postfix 6632 0.0 0.4 91800 4108 ? S 19:32 0:00 qmgr -l -t unix -u
root 10 0.0 0.0 0 0 ? S< 19:32 0:00 [lru-add-drain]
root 1 0.0 0.3 125400 3824 ? Ss 19:32 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 11 0.0 0.0 0 0 ? S 19:32 0:00 [watchdog/0]
root 12 0.0 0.0 0 0 ? S 19:32 0:00 [watchdog/1]
root 13 0.0 0.0 0 0 ? S 19:32 0:00 [migration/1]

posted @ 2020-06-08 21:09  程翔北  阅读(153)  评论(0)    收藏  举报