Linux 的shell 编程
-记住三个命令的运用形式
grep ‘字符’ 文件
sed ‘命令’ 文件
awk ‘条件{命令}’ 文件
-死记一点,单引号内就是正则表达式的用法
1.grep 及正则查询
2.cut 操作
2.1 cut 查看
2.2 cut [选项] 文件名
选项:
-f 列号 :提取第几列
-d 分隔符 :按照指定分隔符分隔列
2.2.1cut命令的局限
df -h | cut -d " " -f 1,3
2.2.2 查询除去root 以外的
2.3 printf 命令
printf ‘输出类型输出格式’ 输出内容
输出类型:
- %ns : 输出字符串,n是数字指代输出几个字符。
-%ni : 输出整数。n是数字指代输出几个数字。
-%m.nf : 输出浮点数。m和n是数字,指代输出的整数位数和小数位数
如:%8.2f代表共输出8位数,其中2位是小数,6位是整数。
输出格式: - \a : 输出警告声音;
- \b : 输出退格键,也就是Backspace键
- \f : 清除屏幕
- \n :换行
- \r : 回车,也就是Enter键
- \t : 水平输出退格键,也就是Tab键
- \v : 垂直退格键,也就是Tab键
2.3.1 printf ‘%s’ $ (cat student.txt)
不调整输出格式
printf ‘%s\t%s\t%s\t%s\n’ $(cat stu.txt)
2.4 awk ‘条件1{动作1}条件2{动作2}…’ 文件名
条件(Pattern): - 一般使用关系表达式作为条件
- x > 10判断变量x是否大于10
- x >= 10 大于等于
- x <= 10 小于等于
动作(Action): - 格式化输出
- 流程控制语句
在awk命令的输出中支持print和printf命令
print :print会在每个输出之后自动加入一个换行符(Linux默认没有print命令)
printf :printf是标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符
2.4.1 BEGIN
awk ’ BEGIN{printf"hello baby \n"}{printf $2 “\t” “$4” “\n”}’ stu.txt
2.4.2END
awk ’ END{printf"hello baby \n"}{printf $2 “\t” “$4” “\n”}’ stu.txt
2.5 sed 命令
sed 是一种几乎包括所有的UNIX平台(包括Linux) 的轻量级流编辑器。sed主要是用来将数据进行选取、替换、删除、新增的命令。
sed [选项] ‘[动作]’ 文件名
-n :一般sed命令会把所有数据都输出到屏幕,如果加入此选择则只会把经过sed命令处理的行输出到屏幕。
-e :允许对输入数据应用多条sed命令编辑
-i :用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
- a : 追加,在当前行添加一行或多行
- c : 行转换,用c后面的字符串替换元数据行
- i : 插入,在当期行前插入一行或者多行。
- d : 删除,删除指定的行
- p : 打印,输出指定的行
- s : 字串转换,用一个字符串替换另一个字符串。格式为 “行范围s/旧字串/新字串/g” (和 vim 中的替换格式类似)。
2.5.2 行数据操作
sed ‘2p’ stu.txt
#查看文件的第二行
sed -n ‘2p’ stu.txt
sed ‘2,3d’ stu.txt
删除第二行到第三行的数据,但不修改文件本身
sed ‘2a piaoliang jiushi renxing’ stu.txt
在第二行后追加hello
sed ‘2i meinv’ stu.txt
在第二行前插入两行数据
sed ‘2c piaoliang jiushi renxing’ stu.txt
数据替换
2.5.3 字符串替换
sed ‘2s/59/99/g’ stu.txt
在第二行中,把59换成99
sed -i ‘2s/59/99/g’ stu.txt
sed操作的数据直接写入文件
sed -e ‘s/youyou//g;s/abin//g’ stu.txt
同时把"youyou" 和 abin 替换成空