shell编程
基础正则表达式
正则和通配符的区别:正则是包含匹配,匹配文件内容,grep,awk等支持正则表达式。通配符是完全匹配,匹配文件名,例如find,ls不认识正则表达式
####正则表达式常用的字符(注意区别于通配符里面的符号)####
- -*,前一个字符重复任意多次
- . ,匹配任意一个字符
- ^ 匹配行首
- $ 匹配行尾
- [] 匹配括号中的任意一个
- [^]对中括号中的字符取反
- \ 转移符
正则表达式实例
grep "a*" text.txt
匹配文件中的全部内容grep "aa*" text.txt
匹配至少一个a的行grep "s..d" text.txt
匹配s和d中间有两个字母的行grep ".*" text.txt
匹配所有内容grep ""a[opd]d text.txt
匹配aod apd addgrep "^[0-9] text.txt"
匹配行首是数字的行grep "a\{3\}" text.txt
匹陪刚好出现3次a的行
字符提取命令
cut [op] 文件名 ####、
- -f 列号,
- -d 分隔符
cut 的默认分隔符是制表符tab,需要使用-d指定分隔符,入股是连续的空格作为分隔符,cut命令就会失效
printf ‘输出格式’,输出内容
格式化输出命令,%ns 字符串,%ni整数, %m.nf小数,共计m位,小数是n位
/n换行 /r回车 /t制表符
无法使用重定向的方式来输出文件内容
awk ‘条件1 {动作1},条件2 {动作2}…’ 文件名
常用条件:大于小于比较,
常用动作:格式化输出,流程控制
命令实例:
awk '{printf $2 "/t" $6 "/n"}' text.txt
输出表格的2,6列,可以自动识别多个空格分隔符awk 'BEGIN {print "%s" this is test} {printf $2 "\n"}' text.txt
在每一次读取数据之前输出字符串awk 'BEGIN{FS=":"} {printf $2 "\n"} text.txt'
指定分隔符是:同理,还有END条件
sed 轻量级的流文本编辑器
支持管道,可以直接编辑命令输出结果
sed [op] '[动作]' 文件名
- -n 把经过处理的数据输出到屏幕
- -e 允许对输入数据应用多条sed命令编辑
- a\ 追加,在当前行后添加一行多行
- c\替换行
- p 输出行
- d 删除行
代码实例
sed '2p' student.txt
输出第二行数据
sed '2a nihao' student.txt
在第二行后追加数据
sed '2i niyeshi\ duia' student.txt
在第二行前面加入两行数据,\代表数据没有输入完成