1、cut 提取符合条件的列(grep提取符合条件的行):
-f:列号,提取第几列
-d:分隔符,按照指定的分隔符分隔
例子:test.txt是以下内容
ID NAME GENDER MARK
1 张三 M 80
2 赵四 M 90
3 王五 M 70
【注】:列与列之间一定要是tab不能是空格,如果是空格cut无法正确提取
cut -f 2,3,4 test.txt //取出第2,3,4列
默认使用的tab作为分隔符,如果要切割/etc/passwd是以“:”作为分隔符,这样就用-d指定2分隔符
cut -d ":" -f 2,3 /etc/passwd
2、printf (严格来说不算字符提取命令,是输出命令,因为awk要用到)
printf '输出类型输出格式' 输出内容
输出类型:
%ns:输出字符串。n是数字,n是数字指输出几个字符
例子:
printf “%s” 1 2 3 //123,输出一个整体
printf "%s %s %s" 1 2 3 //1 2 3 当成三个元素来输出,%s要用双引号括起来
printf "%s %s %s\n" 1 2 3 4 5 6 // 1 2 3
4 5 6 三个一组
【注】:printf后面不能跟文件名、不能把管道符结果作为它的输出
printf "%s\t %s\t %s\t %s\t %s\t %s\t" $(cat test.txt)
%ni:输出整数。n是数字指输出几个数字
%m.nf:输出浮点数。m和n是数字,指输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位是整数
输出格式:
\n:换行
\r:回车,也就是Enter
\t:制表符
3、awk(用能cut就用cut,实在不能用再用awk,类似空格作为分隔符的)
awk “条件1{动作1}条件2{动作2}.........” 文件名
条件:
一般使用关系表达式作为条件
x>10 判断变量是否大于10
x>=10 大于等于
x<=10 小于等于
动作(Action):
格式化输出
流程语句
3.1 基本使用方法
ID NAME PHP LINUX MYSQL ABERAGE
1 张三 60 70 80 70
2 赵四 65 75 85 75
3 王五 70 80 90 80
例子1:没有条件,直接动作执行输出
awk '{printf $2 '\t" $6}' test.txt //printf输出 $2(代表第二列),$6(代表第6列),但是是紧挨着输出,所以中间要加一个制表符用双引号引起来就有格式了
df -h | grep /dev/sda5 | awk '{print $5}' | cut -d "%" -f 1 //获取根分区下使用百分比
例子2:有条件BEGIN
df -h | grep /dev/sda5 | awk 'BEGIN{print "this is a test"}{print $5}' | cut -d "%" -f 1 //在取出第2列与第6列之前先输出this is a test
例子3:指定分隔符FS,需要用到BEGIN
awk 'BEGIN{FS=":"}{print $1 "\t" $6}' /etc/passwd //如果不加BEGIN,第一行不会处理,因为他会先读一行在去处理,加了BEGIN就不会了
例子4:条件END
awk 'BEGIN{FS=":"}END{print "this is end "}{print $1 "\t" $6}' /etc/passwd //在分割显示完成之后输出this is end
例子4:支持>、>=、<=等条件
car test.txt | grep -v NAME | awk '$6>=87 {print $2}'
4、sed:主要用来对数据,选取、替换、删除、新增,与vim不同的是,sed不仅可修修改文件内容,还可以对筛选的数据直接操作最终保存。
选项:
-n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过的sed命令处理的行输出到屏幕。
-e:允许对输入数据应用多条sed命令编辑
-i:用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出,直接影响源文件内容
动作:
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶打印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
例子1:输出
sed '2p' test.txt //输出了第二行,又输出了整个内容
sed -n '2p' test.txt //加入-n,只输出第2行,一般使用p选项都会使用-n
例子2:删除(只修改屏幕输出的内容,不修改源文件,想要一起修改源文件加-i)
sed '2,4d' test.txt //屏幕显示没有第2行~第4行,源文件内容没有更改,因为这条命令没有加-i,操作的仅仅是输出内容不会删除源文件
sed -i '2,4d' test.txt //源文件第2~4行内容也被删除了
例子3 : 添加(只修改屏幕输出的内容,不修改源文件,想要一起修改源文件加-i)
sed '2a this is a test' test.txt //在第二行后一行会添加 this is a test
sed '2i this is a test' test.txt //在第二行前一行插入 this is a test
例子4:替换(只修改屏幕输出的内容,不修改源文件,想要一起修改源文件加-i)
sed '2c this is a test' test.txt //将第二行内容替换为 this is a test ,行替换
sed '3s/aa/bb/g' test.txt //将第三行的aa替换成bb,跟vim一样,但是没有%s,想整篇替换's/aa/bb/g'
例子5:多个sed命令一起执行,例如多个一起替换
sed -e 's/aa/bb/g;s/vv/mm/g' test.txt //将aa替换成bb,vv替换成mm