正则表达式:用于描述字符排列和匹配模式的一种语法规则,它主要是用于字符串的模式分割,匹配,查找以及替换操作
匹配是包含匹配: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
”^” 匹配行首 ”$” 匹配行尾
grep "^s" test.txtgrep "^a" test.txtgrep "b$" test.txt
grep -ll "^s" test.txt”[]“与通配符中的”[]” 作用一致
grep ”^[0-9]” test.txt
”[^]” 匹配符中括号的字符以外的任意一个字符
grep "[^a-z]" test.txtgrep "^[^a-z]" test.txt#匹配不用小写字母开头的行
grep "^[^a-zA-Z]" test.txt#匹配不用字母开头的行""转义符
”.$” #匹配使用 ”.” 结尾的行
grep ".$" test.txt #(x)grep "\.$" test.txt #(√)“{n}“表示其前面的字符恰好出现n次
“a{3}” #匹配a 字母至少重复3次
“[0-9]{3}” #匹配包含连续的三个数字的字符串
grep "a\{3\}" test.txtgrep "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 字段提取命令
grep "/bin/bash" /etc/passwdgrep "/bin/bash" /etc/passswd | grep -v "root"grep 行提取命令
cut 列提取命令
cut [选项] 文件名
选项:
-f:列号:提取第n列 -d:分隔符,按照指定分隔符分割列
vi student.txtID Name Gerden Mark1 furong F 852 fengjie F 603 cangls F 70cut -f 2 student.txtcut -f 2,4 student.txt
grep "/bin/bash" /etc/passwd/ | grep "root" | cut -f 1 -d ":"
cut -d ":" -f 1,3 /etc/passwdcut命令的局限
df -h | cut -d "" -f 1,3
printf命令:格式化输出命令
printf”输出类型输出格式”
输出类型:
- -%ns:输出n个字符串
- -%ni:输出n个数字
- -%m.nf:输出浮点数
%8.2f : 输出8位数,小数2位,整数6位
输出格式:
\a\b\f #清屏\n\r #回车\t\v # 垂直输出退格键 tabprintf 1 2 3 4 5 6printf %s 1 2 3 4 5 6printf %s %s %s 1 2 3 4 5 6printf '%s %s %s' 1 2 3 4 5 6printf '%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)
-格式化输出
-流程控制语句
awk '{printf $"\t"$4"\n"}' student.txtdf -h | awk '{print $1 "\t" $3}'df -h | grep "/dev/sda5/" | awk '{printf $5 "\n"}' | cut -d "%" -fBEGIN条件:
awk ‘BEGIN{printf “This is a transcript “\n""}{printf $2 “\t” $4 “\n”}’ student.txt
END条件:(同上)
FS内置变量:
cut /etc/passwd | grep "/bin/bash" | awk 'BEGIN{FS=":"}{printf $1 "\t" $3 "\n"}'cut /etc/passwd | grep "/bin/bash" | awk '{FS=":"}{printf $1 "\t" $3}'cut /etc/passwd | grep /bin/bash | awk 'BEGIN{FS=":"}{print $1 "\t" $3}'关系运符
cut student.txt | grep -v Name | awk '$4'>=70 {pritnf $2 "\n"}'