shell脚本编程-正则表达式
上午知识点:
exoect 预期交互
expect << EOF
spawn 执行的交互命令
expect "命令的提示关键字" { send "要发送的命令 \r"}
...
expect "#" { send "exit \r" }
EOF
变量的默认值:
var=${ var:-word}
正则表达式:
通配符: * ? [ ] ^
*.txt 以.txt结尾
a??.txt 以。txt结尾的两个字符名的文件
[0-9] [a-z] [A-Z] [a-Z] [1,2]
[^0-9] 和 [!0-9] //取反,非数字
*5? : 倒数第二位第5的
{[abc],*.txt} : 匹配a 和b 和c 和以.txt 结尾
基本正则表:
^ : 表示匹配行首
$ : 匹配行尾
[ ] : 集合、匹配集合中任意的单个字符
[^] : 对集合进行取反
. : 匹配任意单个字符
* : 匹配前一个字符任意次数,*号不能单独使用
\{n,m\} : 匹配前一个字符n到m次
\{n\} : 匹配前一个字符n次
\{n,\} : 匹配前一个字符n次以上
\(\) : 保留
拓展正则表:
+ :最少匹配一次 1-∞
? :最多匹配一次 0-1 包含没有的情况
{n,m} : 匹配n到m次
() :组合为整体,保留
| :或者
\b : 单词边界
grep查询匹配的行,
egrep检索文本行:
echo -e
测试文件: /etc/passwd
1.输出以“r”开头的行:
# grep ‘^r’ /etc/passwd
2.输出以“nologin”结尾的行:
# grep ‘/bin/bash$’ /etc/passwd
3.组合多个条件,查找以root开头的行或者以用户名开头的行
# egrep ‘root|whn’ /etc/passwd
# grep -E ‘root|whn’ /etc/passwd
# grep ‘root|whn’ /etc/passwd
grep中的选项:
-q :表示静默,只检索不输出
-c:可输出匹配到的行数
4.输出/etc/passwd中非空行
# efrep ‘.’ /etc/passwd
# egrep -v ‘^$’ /etc/passwd
测试文件:/etc/rc.local
5.输出包括f、ff、…的行,输出f至少出现一次
# egrep ‘f+’ /etc/rc.local
6.输出包含init、initial的行 ?
# egrep init(ial)? /etc/rc.local
7.输出包含stu、stuff、…的行
# egrep stuf* /etc/rc.local
8.输出所有行 .* 包含空行
9.输出以r开头,并且以nologin结尾的行,中间可以是任意字符
# egrep ‘^r.*nologin$’ /etc/passwd
10.输出ababab ab连续出现了四次 ‘(ab){4}’
11.输出abc、abd : ‘ab[cd]’
12.输出包括以hh结尾的单词的行 ‘hh\b’ 或者 ‘hh>’ ‘\hh>’ ‘\hh\b’
niha ma asdhh aha wohenhao
匹配符MAC地址:
以冒号分割一共6位。是一个16进制: 00:50:C0:C5:R2:C5
’ [0-9A-F]{2}: [0-9A-F]{2}: [0-9A-F]{2}: [0-9A-F]{2}: [0-9A-F]{2}:’