笔记
1.cut命令
[root@localhost ~]# cut [选项] 文件名
选项:
-f 列号: 提取第几列
-d 分隔符: 按照指定分隔符分割列
[root@localhost ~]# vi student.txt #中间为tab键换行符
ID Name gender Mark
1 zhangsan M 86
2 lisi M 90
3 wangwu M 83
[root@localhost ~]# cut -f 2 student.txt
[root@localhost ~]# cut -f 2,3 student.txt
[root@localhost ~]# cut -d ":" -f 1,3 /etc/passwd
cut命令局限:#不能以空格作为提取符,cut以空格为识别对象
[root@localhost ~]# df -h | cut -d " " -f 1,3
2.printf命令
printf ’输出类型 输出格式’ 输出内容
输出类型:
%ns: 输出字符串。n是数字指代输出几个字符
%ni: 输出整数。n是数字指代输出几个数字
%m.nf: 输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%6.2f代表共输出8位数,其中2位是小数,6位是整数。
输出格式:
\a: 输出警告声音
\b: 输出退格键,也就是Backspace键
\f: 清除屏幕
\n: 换行
\r: 回车,也就是Enter键
\t: 水平输出退格键,也就是Tab键
\v: 垂直输出退格键,也就是Tab键
[root@localhost ~]# printf %s 1 2 3
123[root@localhost ~]# printf '%s %s' 1 2 3
1 23 [root@localhost ~]# printf '%s %s' 1 2
1 2[root@localhost ~]# printf '%s %s\n' 1 2
1 2
printf '%s' $(cat student.txt)
#不调整输出格式
printf '%s\t %s\t %s\t %s\t \n' $(cat student.txt)
#调整格式输出
在awk命令的输出中支持print和printf命令
print:print会在每个输出之后自动加入一个换行符(Linux默认没有print命令)
printf:printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符
3.awk命令
#awk ‘条件1{动作1} 条件2{动作2}…’ 文件名
条件(Pattern):
一般使用关系表达式作为条件
x > 10 判断变量 x是否大于10
x>=10 大于等于
x<=10 小于等于
动作(Action):格式化输出、流程控制语句
[root@localhost ~]# awk '{printf $2 "\t" $3 "\n"}' student.txt
Name gender
zhangsan M
lisi M
wangwu M
[root@localhost ~]# df -h | awk '{print $1 "\t" $3}'
文件系统 已用
/dev/mapper/centos-root 2.5G
devtmpfs 0
tmpfs 0
tmpfs 6.7M
tmpfs 0
/dev/sda1 124M
tmpfs 0
[root@localhost ~]#
#BEGIN
[root@localhost ~]# awk 'BEGIN{printf "this is a transcript \n"} {printf $2 "\t" $3 "\n"}' student.txt
this is a transcript
Name gender
zhangsan M
lisi M
wangwu M
#END
[root@localhost ~]# awk 'END{printf "The End \n" } {printf $2 "\t" $3 "\n"}' student.txt
Name gender
zhangsan M
lisi M
wangwu M
The End
[root@localhost ~]#
#FS内置变量
[root@localhost ~]# cat /etc/passwd | grep "/bin/bash" | awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
root 0
[root@localhost ~]#
#关系运算符
[root@localhost ~]# cat student.txt | grep -v Name | awk '$4 >= 87 {printf $2 "\n" }'
lisi
4.sed命令
sed 是一种几乎包括在所有 UNIX 平台(包括 Linux)的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。
[root@localhost ~]# sed [选项] ‘[动作]’ 文件名
选项:
-n: 一般sed命令会把所有数据都输出到屏幕 ,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕。
-e: 允许对输入数据应用多条sed命令编辑
-i: 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
a \: 追加,在当前行后添加一行或多行。添加多行时,除最后 一行外,每行末尾需要用“\”代表数据未完结。
c \: 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用“\”代表数据未完结。
i \: 插入,在当期行前插入一行或多行。插入多行时,除最后 一行外,每行末尾需要用“\”代表数据未完结。
d: 删除,删除指定的行。
p: 打印,输出指定的行。
s: 字串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字串/新字串/g”(和vim中的替换格式类似)。
#行数据操作
[root@localhost ~]# sed '2p' student.txt
ID Name gender Mark
1 zhangsan M 86
1 zhangsan M 86
2 lisi M 90
3 wangwu M 83
#查看文件的第二行
[root@localhost ~]# sed -n '2p' student.txt
1 zhangsan M 86
#查看文件的第二行
[root@localhost ~]# sed '2,4d' student.txt
ID Name gender Mark
#删除第二行到第四行的数据,但不修改文件本身
[root@localhost ~]# sed '2a hello' student.txt
#在第二行后追加hello
[root@localhost ~]# sed '2i hello \
world' student.txt
#在第二行前插入两行数据
# sed '2c No such person' student.txt
#第二行数据替换
#字符串替换
#格式sed 's/旧字串/新字串/g' 文件名
[root@localhost ~]# sed '2s/86/99/g' student.txt
ID Name gender Mark
1 zhangsan M 99
2 lisi M 90
3 wangwu M 83
#在第二行中,把86换成99
[root@localhost ~]# sed -i '2s/86/99/g' student.txt
[root@localhost ~]# cat student.txt
ID Name gender Mark
1 zhangsan M 99
2 lisi M 90
3 wangwu M 83
#sed操作的数据直接写入文件
[root@localhost ~]# sed -e 's/zhangsan//g;s/lisi//g' student.txt
ID Name gender Mark
1 M 99
2 M 90
3 wangwu M 83
#同时把“zhangsan”和“lisi”替换为空