1.提示
默认 grep sed不能直接识别
grep 提升自己 -- egrep/grep -E
sed 提升自己 -- sed -r 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等
还有就是一种方法把需要用到的拓展正则用撬棍\打回到基本的正则表达式
2.+号符号( 匹配前一个字符连续出现了1次或者多次 )
my qq num is 49000448.
not 4900000448.
egrep "0+" oldboy_test.txt
grep "0\+" oldboy_test.txt
结果: 000
00000
找出身份证信息输入错误的内容
张三 110105199004067631
李四 104105199004067631
王五 104105199004067631
赵六 oldboy
grep -Ev "[0-9]+" oldboy_test02.txt
赵六 oldboy
3.竖线符号|
用于匹配多个信息
grep -E "oldboy|oldbey" oldboy_test.txt
4. 括号符号() 看作整体
作用1. 指定信息进行整体匹配
grep "oldb[oe]y" oldboy_test.txt
grep -E "oldb(oe)y" oldboy_test.txt
作用2. 进行后项引用前项使用: sed命令替换功能
echo oldboy{01..10}|xargs -n1
oldboy01
oldboy02
oldboy03
oldboy04
oldboy05
oldboy06
oldboy07
oldboy08
oldboy09
oldboy10
echo oldboy{01..10}|xargs -n1|sed -r 's#(.*)#useradd \1#g' | bash
# \1代表后项引用前项 xargs -n1代表换行显示 -r代表拓展命令
把每一行的内容都放在(.*)中 最后要放到bash解释器中 不然只会输出 不会执行命令
面试题: 批量创建用户 oldboy01..oldboy10,并给每个用户设置密码信息,默认初始化密码(123456)
seq -w 10|sed -r 's#(.*)#useradd oldboy\1;echo 123456|passwd --stdin oldboy\1#g
stdin标准输入
将输出的信息
echo 123456 ==> 转换为 <123456>进行显示
echo 123456|sed -r 's#(.*)#<\1>#g'
sed -r 's#([1-6]+)#<\1>#g'
echo 123456 ==> 转换为 <12><34><56>进行显示
[root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><\2><\3>#g"
<12><34><56>
[root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><><\3>#g"
<12><><56>
[root@oldboyedu ~]# echo 123456|sed -r "s#(12)(34)(56)#<\1><\3><\3>#g"
<12><56><56>
[root@oldboyedu ~]# echo 123456|sed -r "s#(..)(..)(..)#<\1><\2><\3>#g"
<12><34><56>
5.括号符号{} (可以指定字符连续匹配的次数)
第一种情况: x{n,m} 表示前一个字符至少连续出现n次,最多出现m次
grep -E "0{2,3}" oldboy_test.txt
grep -E "0{2,4}" oldboy_test.txt -o
第二种情况: x{n} 表示前一个字符正好连续出现了n次
grep -E "0{2}" oldboy_test.txt
第三种情况: x{n,} 表示前一个字符至少连续出现n次,最多出现多少次不限
grep -E "0{2,}" oldboy_test.txt
第四种情况: x{,m} 表示前一个字符至少连续出现0次,最多出现m次
grep -E "0{,2}" oldboy_test.txt
6. 问号符号 ?
定义匹配前一个字符出现0或者1次
7. 拓展的正则表达式总结
* 匹配前一个字符出现0次或者多次
+ 匹配前一个字符出现1次或者多次
{} 匹配前一个字符指定出现多少次,至少0次
? 匹配前一个字符出现0次或者1次
8.利用ip address show eth0只把IP地址信息显示出来
ip a s eth0|egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -o|head -1
10.0.0.200
