cut
cut是负责剪切数据用的,cut命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段输出。
基本用法
cut [选项参数] filename
选项参数说明
-f:列号,提取第几列
-d:分隔符,按照指定的分隔符分隔列,默认的分隔符是制表符tab
例子
修改demo.txt。
11 12 13
21 22 23
31 32 33
# 切割demo.txt的第一列
[root@localhost opt]# cut -f 1 demo.txt
11
21
31
# 切割demo.txt的第1,2列
[root@localhost opt]# cut -f 1,2 demo.txt
11 12
21 22
31 32
# 切割系统变量PATH第二个":"后的所有路径
[root@localhost opt]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost opt]# echo $PATH | cut -d : -f 2-
/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
sed
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
基本用法
sed [选项参数] 'command' filename
选项参数说明
-e:直接在指令列模式进行sed动作编辑,加了-e可以在一条命令里执行多个操作,不加的话,只能执行一个操作。
命令功能描述
a:新增,a后面接字符串,在下一行出现
d:删除
s:查找并替换
例子
修改demo.txt
# 在第二行后添加"x y z"
[root@localhost opt]# sed "2a x y z" demo.txt
11 12 13
21 22 23
x y z
31 32 33
# 查看demo.txt,并没有变化
[root@localhost opt]# cat demo.txt
11 12 13
21 22 23
31 32 33
# 删除带22的行
[root@localhost opt]# sed "/22/d" demo.txt
11 12 13
31 32 33
# 将2换成x,其中g代表global
[root@localhost opt]# sed "s/2/x/g" demo.txt
11 1x 13
x1 xx x3
31 3x 33
# 将第3行删除,并将3替换为y
[root@localhost opt]# sed -e "3d" -e "s/3/y/g" demo.txt
11 12 1y
21 22 2y
awk
把文件逐行读入,以空格为默认分隔符切片,切开部分进行分析处理。
基本用法
awk[选项参数] 'pattern1{action1} pattern2{action2}……' filename
pattern:表示awk在数据中查找的内容,采用正则匹配的方式
action:找到匹配的内容后,执行一系列的命令
选项参数说明
-F:指定输入文件的分隔符
-v:赋值一个用户定义变量
awk的内置变量
FILENAME:文件名
NR:已读记录数,可以理解为行号
NF:浏览记录域的个数,即切割后列的个数,可以理解为列号
例子
# 数据准备
[root@localhost opt]# cp /etc/passwd ./
# 查找passwd文件中,以root关键字开头的所有行,输出该行的第7列
[root@localhost opt]# awk -F : '/^root/ {print $7}' passwd
/bin/bash
# 查找passwd文件中,以root关键字开头的所有行,输出该行第1列和第7列,以“,”分隔
[root@localhost opt]# awk -F : '/^root/ {print $1","$7}' passwd
root,/bin/bash
# 显示passwd的第一列和第七列,以逗号分隔,在所有行前加‘begin’,在最后加‘end’
[root@localhost opt]# awk -F : 'BEGIN{print "beign"} {print $1","$7} END{print "end"}' passwd
beign
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
lp,/sbin/nologin
sync,/bin/sync
shutdown,/sbin/shutdown
halt,/sbin/halt
mail,/sbin/nologin
operator,/sbin/nologin
games,/sbin/nologin
ftp,/sbin/nologin
nobody,/sbin/nologin
systemd-network,/sbin/nologin
dbus,/sbin/nologin
polkitd,/sbin/nologin
sshd,/sbin/nologin
postfix,/sbin/nologin
chrony,/sbin/nologin
end
# 将passwd的第三列都加1
[root@localhost opt]# awk -F : -v i=1 '{print $3+i}' passwd
1
2
3
4
5
6
7
8
9
12
13
15
100
193
82
1000
75
90
999
# 统计passwd中,每行的行号和每列的列数
[root@localhost opt]# 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
sort
将文件进行排序,将排序结果进行标准输出。
基本语法
sort(选项)(参数)
选项参数说明
-n:按照数字大小排序
-r:按照相反顺序排序
-t:设置排序时候的分隔符
-k:指定需要排序的列
例子
# 准备数据
a:5:3
b:2:4
c:1:2
# 对demo.txt以“:”分隔,按照第三列倒序排列
[root@localhost opt]# sort -t : -nrk 3 demo.txt
b:2:4
a:5:3
c:1:2