Shell工具的使用:cut、sort、awk、sed
cut
cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出
-
cut [选项参数] filename
-
| 功能 | |
|---|---|
| -f | 列号,提取几列 |
| -d |
实际操作:
1. 数据准备:
dong guan
wo ai
liu yan fang
he chang hang
guo qing hui lai
kan ni deng wo
lao po
2. 切割cut第一列
cut -d " " -f 1 cut.txt # -d 表示用什么分割,这里是" "空格 # -f 表示切割第几列,这里是第一列
3.
cat cut.txt | grep guo | cut -d " " -f 1
4. 切割ifconfig后打印的IP地址
ifconfig ens33 | grep "inet" | cut -d : -f 2 | cut -d " " -f 1
sed
-
-
把当前行存储在临时缓冲区中,称为模式空间
-
1. 基本用法
sed [选项参数] ‘command’ filename
2. 选项参数说明
| 选项参数 | 功能 |
|---|---|
| -e |
3. 命令功能描述
| 命令 | 功能描述 |
|---|---|
| a | 新增,a的后面可以接字符串,在下一行出现 |
| d | 删除 |
| s |
4. 实际操作
4.1 数据准备
dong shen
guan zhen
wo lai
le le
4.2
sed "2a mei nv" sed.txt # 2a 在第2行下面插入mei nv 插入到sed.txt文件中
4.3 删除sed.txt文件所有包含wo的行
sed "/wo/d" sed.txt # 将包含wo的一行删除 /d:删除的意思
4.4 将sed文件中wo替换位ni
sed "s/wo/ni/g" sed.txt # s: 开始 /g: 全局
4.5 将sed文件中的第二行删除并将wo替换为ni
sed -e "2d" -e "s/wo/ni/g" sed.txt # -e 表示连续执行
awk
-
-
文件逐行读入
-
基本语法:
awk [选项参数] ‘pattern {action1} pattern2{pattern2} ...’ filename
-
pattern:表示AWK在数据中查找的内容,就是匹配模式
-
action:在找到匹配内容时所执行的一系列命令
| 选项参数 | 功能 |
|---|---|
| -F | 指定输入文件折分隔符 |
| -v |
实际操作:
sudo cp /etc/passwd ./ # 搜索passwd文件以root开头的所有行,并输出改行的第7列 awk -F: '/^root/ {print $7}' passwd # 以root开头,$7 是第7行,以 : 切分 # 搜索passwd文件以root关键字开头的所有行,并输出该行的第一列和第七列,中间以“,”分割 awk -F: '/^root/ {print $1","$7}' passwd # 只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行的前面添加列名user,shell在最后一行添加“joey” awk -F : 'BEGIN{print "user,shell"} {print $1","$7} END{print "joey"}' passwd #将passwd文件中的用户id增加数值1并输出 awk -F : -v i=1 '{print $3+i}' passwd
awk内置变量:
| 说明 | |
|---|---|
| Filename | 文件名 |
| NR | 已读的记录数 |
| NF |
sort
参数说明:
| 选项 | 说明 |
|---|---|
| -n | 依照数值的大小进行排序 |
| -r | 相反的顺序排序 |
| -t | 设置排序时所需的分割字符 |
| -k |
实操:
# 按照“:”分割后的第三列倒序排序 sort -t : -nrk 3 sort.sh