一、grep
应用场景: 通常对数据进行处理
语法:grep [选项] [内容] [文件名]
-v : 对内容进行取反提取
-n : 对提取的内容显示行号
-w : 精确匹配,全字符匹配上某一行
-i : 忽略大小写
^ : 匹配以之后内容为首的行,如grep '^user' /test,匹配以user为首的行
-E : 正则匹配,如grep -E 'user1|user2|user3' /test ,匹配有user1或user2或user3的行
-r : 递归搜索
-e : 该选项加上正则表达式就是一个需要匹配的模式,如grep -e 'user1' -e 'user2' /test,匹配user1或user2的行
二、cut
应用场景:通常对数据进行列提取
语法: cut [选项] [文件]
-d : 指定分隔符
-f : 指定截取区域
-c : 以字符为单位进行分割
注:不加-d选项,默认分隔符为制表符(tab),不是空格
eg : 以:为分隔符,截取第一列和第三列
cut -d ':' -f 1,3 /test
eg : 以:为分隔符,截取第一列到第三列
cut -d ':' -f 1-3 /test
eg : 以:为分隔符,截取第一列到最后一列
cut -d ':' -f 1- /test
eg : 截取第一到第三个字符
cut -c 1-3 /test
三、awk
应用场景:通常对数据按行进行处理,对结果进行列的提取
语法:awk '条件 {指令}' 文件
awk '条件1 {指令} 条件2 {指令} ...' 文件
awk [选项] '条件1 {指令} 条件2 {指令} ...' 文件
特殊点:
printf : 格式化输出,不会自动换行
(%ns: 字符串型,n代表有几个字符
%ni: 整型,n代表有几个数字
%.nf: 浮点型,n代表小数点后有几个小数)
print : 打印输出内容,默认会自动换行
eg : printf '%s %s %s' 1 2 3 4 5 6
eg :df -h | grep /dev/vda1 | awk '{printf "/dev/vda1的使用率是:"} {print $5}
eg : echo "scale=2; 0.13 + 0.12" | bc | awk '{printf "%.2f", $0}'
注:$1、$2...:表示第几列; $0 :表示一整行
-F : 指定分隔符
eg: cat /etc/passwd | awk -F":" '{print $1}'
BEGIN :在读取所有行内容前执行后面的指令,常用于修改内置变量的值
FS : 在BEGIN时,定义分隔符
eg : cat /etc/passwd | awk 'BEGIN {FS=":"} {print $1}'
END : 执行结束后,执行后面的指令
NR: 行号
eg : df -h | awk 'NR==2 {print $5}'
awk '{NR>=20 && NR<=30} {print $1}' /etc/passwd
四、
sed
应用场景:通常对行进行处理及提取
语法:sed [选项] [执行动作] 文件
常见选项和参数
-n : 把匹配到的行输出
p : 以行为单位进行查询,通常与-n一起使用。eg : df -h | sed -n '2p' 输出第二行
d : 删除。eg : sed '2d' df.txt 删除第二行
a : 在行的下面插入新内容。eg : sed '2a 12345' df.txt 在第二行下面插入一行,内容为12345
i :在行的上面插入新内容。eg : sed '2i 12345' df.txt 在第二行上行,内容为12345
c : 替换。eg : sed '2c 12345' df.txt 将第二行替换为12345
s/旧内容/新内容/g :将所有旧内容替换为新内容。eg : sed 's/12345/54321/g' df.txt 将所有12345替换为54321
-i : 对源文件进行修改。
-e : 执行多个动作。eg : sed -n -e 's/123/321/g' -e 's/456/654/g df.txt