正则表达式
1.正则表达式与通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配的
通配符是用来匹配符合条件的文件名,通配符是完全匹配
2.基础正则表达式
元字符 | 作用 |
---|---|
* | 前一个字符匹配0次或任意多次 |
. | 匹配除了换行符外任意一个字符 |
^ | 匹配行首,例如^hello会匹配以hello开头的行 |
$ | 匹配行尾,例如$hello会匹配以hello开头的行 |
[] | 匹配中括号中指定的任意一个字符,只匹配一个字符 |
[^] | 匹配中括号的字符以外的任意一个字符 |
\ | 转义符 |
\{n\} | 表示其前面的字符恰好出现n次 |
\{n,\} | 表示其前面的字符出现不小于n次 |
\{n,m\} | 表示其前面的字符出现不小于n次,最多出现m次 |
字符截取命令
grep也是字符截取命令
cut字段提取命令
cut [选项] 文件名
-f 列号 提取第几列
-d 分隔符 按照指定分隔符分割列
#cut命令只能识别tab和特殊的分隔符才能使用,像空格不能使用
#例子
cut -d ":" -f 1,3 /etc/passwd
printf命令
printf '输出类型输出格式' 输出内容#print 使用后比printf多一个换行(\n)
输出类型:
%ns 输出字符串,n是数字指代输出几个字符
%ni 输出整数,n是数字指代输出几个数字
%m,nf 输出浮点数,m和n是数字,指代输出的整数位数和小数位数,如%8.2f代表共输出8位数,其中2位是小数,6位是整数
输出格式:
\a 输出警告声音
\b 输出退格键,也就是Backspace键
\f 清除屏幕
\n 换行
\r 回车
\t 水平输出退格键,即Tab
\v 垂直输出退格键,即Tab
awk命令
awk '条件1{动作1} 条件2{动作2}...' 文件名#使用时是先读入第一行,在进行处理,可以使用函数调用等功能,可以算是一门语言
条件:
一般使用关系表达式作为条件
x>10 判断变量x是否大于10
x>=10 大于等于
x<=10 小于等于
动作:
格式化输出
流程控制语句
#例子
awk '{printf $2 "\t" $6"\n" }' student.txt
df -h | awk '{print $1 "\t" $5 "\t" $6}'
BEGIN用法
awk 'BEGIN{print "test 1"} {print $2 "\t" $5}' student.txt
#结果
test 1
Name
Lim
Sc
Gao
FS内置变量
awk 'BEGIN{FS=":"}{print $1 "\t" $3}' /etc/passwd
END用法
awk 'END{print "The End"}{print $2 "\t" $4}' student.txt
#结果
Name Mark
Lim 86
Sc 90
Gao 83
The End
关系运算符
cat student.txt | grep -v Name | awk '$4 >= 86{print $2}'
#结果
Lim
Sc
sed命令
轻量流编辑器,可以不在文件中修改,配合管道符操作
sed [选项] '[动作]' 文件名
-n 一般sed命令会把所有数据输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕
-e 允许对输入数据应用多条sed命令编辑
-i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
a\:追加
c\:行替换
i\:插入
d:删除
p:打印
s:字符替换,格式为"行范围s/旧字符/新字串/g"(和vim中替换格式类似)
#例子
sed '2i jlkaf\
> lksdajfl' student.txt
#结果
ID Name gender Mark
jlkaf
lksdajfl
1 Lim M 86
2 Sc M 90
3 Gao M 83
#例子
sed '4s/83/50/g' student.txt
#结果
ID Name gender Mark
1 Lim M 86
2 Sc M 90
3 Gao M 50
#例子
sed -e '3s/90/50/g;4s/83/50/g' student.txt
#结果
ID Name gender Mark
1 Lim M 86
2 Sc M 50
3 Gao M 50