Shell工具
1、cut
cut的工作就是“剪”,具体的说就是在文件中负责剪切数据用的。cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出
(1)基本用法
cut [选项参数] filename
说明:默认分隔符是制表符
(2)选项参数说明
-f 列号,提取第几列
-d分隔符,按照指定分隔符分割列
(3)案例实操
$ cat text
ggagsga xggdsgs
hshx ssr
gsgs
hshshsh gsgs
$ cut -f 1 -d ' ' text #取出第一列
ggagsga
hshx
gsgs
hshshsh
$ cat text |grep hshx|cut -f 1 -d ' ' #取出hshx
hshx
$ echo $PATH |cut -d : -f 2- #选取系统PATH变量值,第二个“:”开始后的所有路径
$ ifconfig eno1|grep inet|cut -d ' ' -f 10-11 #切出ip地址,非标准,每个人的ifconfig显示的内容格式都不太一样
2、sed
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区,称为“模式空间”,接着用sed命令处理缓冲区的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出
(1)基本用法
sed [选项参数] 'command' filename
(2)选项参数说明
-e 直接在指令列模式上进行sed的动作编辑
(3)命令功能描述(常用)
a 新增,a的后面可以接字符串,在下一行出现
d 删除
s 查找并替换
(4)案例实操
a)数据准备
step1:数据准备
$ touch sed.txt
$ vim sed.txt
dong shen
guan zhen
wo wo
lai lai
le le
$
b)将“mei nv"这个单词插入到sed.txt第二行下,打印
$ sed '2a mei nv' sed.txt
dong shen
guan zhen
mei nv
wo wo
lai lai
le le
$
c)删除sed.txt文件所有包含wo的行
$ sed '/wo/d' sed.txt
dong shen
guan zhen
lai lai
le le
$
3)将sed.txt文件中wo替换为ni
$ sed 's/wo/ni/g' sed.txt
dong shen
guan zhen
ni ni
lai lai
le le
$
4)将sed.txt文件中的第二行删除并将wo替换为ni
$ sed -e '2d' -e 's/wo/ni/g' sed.txt
dong shen
ni ni
lai lai
le le
$
3、awk
一个强大的文本分析工具,把文本逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。
(1)基本用法
awk [选项参数] 'pattern{action1} pattern2{action2}...' filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
(2)选项参数说明
-F 指定输入文件折分隔符
-v 赋值一个用户定义变量
(3)案例实操
1)数据准备
$ ps -ef >awk.txt
2)搜索awk文件以root关键字开头的所有行,并输出该行的第7列
$ awk '/^root/{print $7}' awk.txt
3)搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以”,“号分割
$ awk '/^root/{print $1","$7}' awk.txt
3)只显示awk.txt的第一列和第七列,以逗号分割,且在所有行前面添加列名user,time最后一行添加”dahaige,00:00:23"
$ awk 'BEGIN{print "user,name"} {print $1","$7} END{print "dahaige,00:00:23"}' awk.txt
4)将awk.txt文件中的用户id增加数值1并输出
awk -v i=1 '{print $2+i}' awk.txt
(4)awk的内置函数
FILENAME 文件名
NR 已读的记录数
NF 浏览记录的域的个数(切割后,列的个数)
(5)案例实操
1)统计awk.txt文件名,每行的行号,每行的列数
$ awk '{print "filename:"FILENAME",""lines:"NR",""columns:"NF}' awk.txt
2)切割IP
$ ifconfig eno1|grep inet|awk '{print $2}'
3)查询sed.txt中所有的空行所在的行号
$ awk '/^$/ {print NR}' sed.txt
补充:^ 匹配字符串开始的位置,$ 匹配字符串结束的位置
4、sort
sort命令在Linux中里非常有用的,它将文件进行排序,并将排序结果标准输出。
(1)基本语法
sort (选项) (参数)
-n 依照数值的大小排序
-r 以相反的顺序来排序
-t 设置排序时所用的分隔字符
-k 指定需要排序的列
(2)案例实操
1)数据准备
bb:40:5.4
gs:452:53.3
xgh:42:3.4
hh:22:1.2
2)按照”:“分割后的第三列倒序排序
$ sort -t : -nrk 3 sort.sh
gs:452:53.3
bb:40:5.4
xgh:42:3.4
hh:22:1.2