正则表达式:用于描述字符排列和匹配模式的一种语法规则,它主要是用于字符串的模式分割,匹配,查找以及替换操作
匹配是包含匹配:grep,awk,sed 支持正则
通配符是完全匹配,ls,find,cp 不支持正则
基础正则表达式:
vim test.txt
grep “aa*” test.txt
”*“前一个字符匹配0次,或任意多次
“a*” #匹配所有内容,包括空白行
“aa*” #匹配至少包含有一个a 的行
“aaa*” #匹配至少包含有两个a 的行
”.” #匹配除了换行符以后任意一个字符
grep “s..d” test.txt
grep “s.*d” test.txt
”^” 匹配行首 ”$” 匹配行尾
1grep "^s" test.txt2grep "^a" test.txt3grep "b$" test.txt4
5grep -ll "^s" test.txt
”[]“与通配符中的”[]” 作用一致
grep ”^[0-9]” test.txt
”[^]” 匹配符中括号的字符以外的任意一个字符
1grep "[^a-z]" test.txt2grep "^[^a-z]" test.txt3#匹配不用小写字母开头的行4
5grep "^[^a-zA-Z]" test.txt6#匹配不用字母开头的行
""转义符
“.$” #匹配使用 ”.” 结尾的行
1grep ".$" test.txt #(x)2grep "\.$" test.txt #(√)
“{n}“表示其前面的字符恰好出现n次
“a{3}” #匹配a 字母至少重复3次
“[0-9]{3}” #匹配包含连续的三个数字的字符串
1grep "a\{3\}" test.txt2grep "c\{3\}u" test.txt
“{n,}” 表示其前面的字符出现不小于n次
”^[0-9]{3,}[a-z]”
#匹配最少用连续三个数字开头的行
grep “xc{3}n” test.txt
“{n,m}” 匹配其前面的字符至少出现n次,最多出现m次
“sa{1,3}i”
#匹配在字母s字母i之间有最少一个a,最多有三个a
正则表达式案例
[0-9{4}-[0-9]{2}-[0-9]{2}]
#匹配日期格式YYYY-MM-DD
[0-9]{1,3}.[0-9]{1,3}.[0-9]{.3}.[0-9]{1,3}
#匹配ip地址
grep命令
字符截取命令
cut 字段提取命令
1grep "/bin/bash" /etc/passwd2grep "/bin/bash" /etc/passswd | grep -v "root"
grep 行提取命令
cut 列提取命令
cut [选项] 文件名
选项:
-f:列号:提取第n列 -d:分隔符,按照指定分隔符分割列
1vi student.txt2ID Name Gerden Mark31 furong F 8542 fengjie F 6053 cangls F 70
1cut -f 2 student.txt2cut -f 2,4 student.txt3
4grep "/bin/bash" /etc/passwd/ | grep "root" | cut -f 1 -d ":"5
6cut -d ":" -f 1,3 /etc/passwd
cut命令的局限
df -h | cut -d "" -f 1,3
printf命令:格式化输出命令
printf”输出类型输出格式”
输出类型:
- -%ns:输出n个字符串
- -%ni:输出n个数字
- -%m.nf:输出浮点数
%8.2f : 输出8位数,小数2位,整数6位
输出格式:
1\a2\b3\f #清屏4\n5\r #回车6\t7\v # 垂直输出退格键 tab
1printf 1 2 3 4 5 62printf %s 1 2 3 4 5 63printf %s %s %s 1 2 3 4 5 64printf '%s %s %s' 1 2 3 4 5 65printf '%s' $(cat student.txt)
在awk 命令的输出中支持printf 和print命令
print:每个输出之后自动加入一个’\n’ (linux,默认没有print命令)
printf:标准格式输出命令,并不会自动加入’\n’ ,如果需要换行手工添加
awk命令
awk ‘条件1{动作1}条件2{动作2}…’
条件(pattern):
-一般使用关系表达式作为条件
-x>10判断变量x 是否大于10
动作(action)
-格式化输出
-流程控制语句
1awk '{printf $"\t"$4"\n"}' student.txt2df -h | awk '{print $1 "\t" $3}'3df -h | grep "/dev/sda5/" | awk '{printf $5 "\n"}' | cut -d "%" -f
BEGIN条件:
awk ‘BEGIN{printf “This is a transcript “\n""}{printf $2 “\t” $4 “\n”}’ student.txt
END条件:(同上)
FS内置变量:
1cut /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"}{printf $1 "\t" $3 "\n"}'2cut /etc/passwd | grep "/bin/bash" | awk '{FS=":"}{printf $1 "\t" $3}'3cut /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}'
关系运符
1cut student.txt | grep -v Name | awk '$4'>=70 {pritnf $2 "\n"}'