
正则表达式和通配符
正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep、awk、sed等命令可以支持正则表达式
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls、find、cp这些命令不支持正则表达式,所以只能用shell自己的通配符来进行匹配
例:
grep "a*" test_rule.txt
#匹配所有内容,包括空白行
grep "aa*" test_rule.txt
#匹配至少包含一个a的行
grep "a..f" test_rule.txt
#匹配在a和f之间有两个字符的单词
grep "a.*g" test_rule.txt
#匹配在a和g之间有任意字符
grep ".*" test_rule.txt
#匹配所有内容
grep -n "^$" test_rule.txt
#匹配空白行
grep "\.$" test_rule.txt
#转义符 匹配以”.“结尾
cut字段提取
-f: 提取第几列
-d: 按照指定分隔符分割列
例:
cut -d ":" -f 1,3,6 /etc/passwd
#查看用户名、用户UID、家目录
cat /etc/passwd | grep /bin/bash | grep -v root |cut -d ":" -f 1
#提取出系统中能登录的用户。root除外
输出类型:
%ns: 输出字符串。n是数字,指代几个字符
%ni: 输出整数。n是数字指代输出几个数字
%m.nf 输出浮点数,m和n是数字,指代输出的整数位数和小数位数。linux if 多条件如%8.2f代表共输出8位数,其中两位是小数,6位是整数
输出格式:
\a: 输出警告音
\b: 输出退格键(backspace)
\f: 清除屏幕
\n: 换行
\r: 回车
\t: 水平输出退格键(tab)
\v: 垂直输出退格键(tab)
例:
printf ‘%s‘$(cat userdel.txt) 输出文件内容
在awk命令的输出中支持print和printf命令
print:会在每个输出之后自动加入一个换行符(Linux默认没有print命令)
printf:标准格式输出命令,并不会自动加入换行符,如果需要换行,需要手工加入换行符
条件(pattern)
一般使用关系表达式作为条件
X>10 判断变量X是否大于10
X>=10 大于等于
X<=10 小于等于
动作(action)
格式化输出
流程控制语句
例子:
awk ‘{printf $2 "\t" $4 "\n"}‘ student.txt
NAME GENDER
小明 男
小红 女
小亮 男
df -h | grep sda1 | awk ‘{print $5}‘|cut -d "%" -f 1
50
awk ‘BEGIN{ printf "student\n"}{printf $2 "\t" $4 "\n"}‘ student.txt
student
NAME GENDER
小明 男
小红 女
小亮 男
awk ‘END{ printf "student\n"}{printf $2 "\t" $4 "\n"}‘ student.txt
例:
awk ‘BEGIN{FS=":"}{print $1 "\t" $3}‘ /etc/passwd
cat /etc/passwd|grep /bin/bash |awk ‘{print $1 "\t" $3}‘
#显示所有可以登陆的用户
例:
cat student.txt |grep -v ID|awk ‘$3>=12 {print $2}‘
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-86197-1.html
看来米国已经把中国摸了很透彻了
新生代最具商业价值的红烧肉
允许有言论自由