系统通配符号、系统正则符号,grep

系统通配符号、系统正则符号,grep

1 系统通配符号

系统通配符号:借助通配符号 匹配文件名称信息

1.1 *: 匹配所有(任意)字符信息

找寻以old开头的文件

find /oldboy -type f -name "old*"

找寻以.txt结尾的文件

find /oldboy -type f -name "*txt" 

找寻以old开头,txt结尾的文件

find /oldboy -type f -name "old*txt" 

1.2 {}: 批量创建数据信息

echo{01..03}    echo {01..06..2}    echo {01,03,05}
1562207009248-bfec7ff9-09db-4d6b-8be2-ed0f6e2f3d7c.png#align=left&display=inline&height=154&originHeight=154&originWidth=609&size=0&status=done&width=609
不同序列信息,可以进行组合
echo A{A,B} echo A{A,} echo A{,B}
1562207009249-959f1829-a866-4322-840f-21860828a4c3.png#align=left&display=inline&height=100&originHeight=100&originWidth=430&size=0&status=done&width=430
在这里,可以用序列组合来进行快速备份数据,快速还原数据。

1.2.1 快速备份网卡配置文件:

cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.bak} #备份命令
ll /etc/sysconfig/network-scripts/ifcfg-eth0* #查询备份成功

1562207009285-daaf450e-d39c-4649-9be2-ea4a044dc3b9.png#align=left&display=inline&height=102&originHeight=102&originWidth=609&size=0&status=done&width=609

1.2.2 快速还原网卡配置文件:

cp /etc/sysconfig/network-scripts/ifcfg-eth0{.bak,}

1562207009420-0eb50945-5c9f-4c27-8406-d386cd246826.png#align=left&display=inline&height=112&originHeight=112&originWidth=615&size=0&status=done&width=615

2 系统正则符合

系统正则符号:借助正则符号 匹配文件内容信息
基础正则符号:grep sed awk识别
扩展正则符号:grep -E、egrep、sed -r、awk、grep '\扩展正则符号'

2.1 基础正则符号

以下命令执行所需环境
cat >> oldboy.txt <<EOF
I am oldboy teacher!
I teach linux.

I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org
my qq num is 49000448.

not 4900000448.
my god ,i am not oldbey,but OLDBOY!
EOF

2.1.1 ^:以什么开头的信息进行过滤

grep "^I" oldboy.txt

1562207009283-b0a5da09-ef3b-4304-9cf0-4fd1baabc607.png#align=left&display=inline&height=66&originHeight=66&originWidth=397&size=0&status=done&width=397

2.1.2 $:以什么结尾的信息进行过滤

grep "g$" oldboy.txt

1562207009262-b16f01a1-bba9-4054-8753-cd0eecb83195.png#align=left&display=inline&height=36&originHeight=36&originWidth=364&size=0&status=done&width=364

2.1.3 ^$:将查找的空行信息过滤

grep -v "^$" oldboy.txt

2.1.4 . 匹配任意一个且只有一个字符

grep . oldboy.txt -o    ### -o表示命令执行过程

1562207009708-f8db4631-a9d3-45d3-be32-940e9276afa6.png#align=left&display=inline&height=110&originHeight=110&originWidth=415&size=0&status=done&width=415
匹配一个字符并且一个字符一行显示出来

2.1.5 *:匹配前一个字符连续出现0次或者多次

grep "0*" oldboy.txt -o     ### -o表示命令执行过程

1562207009276-1e036dba-81d6-4e12-b0f8-1423c66b053e.png#align=left&display=inline&height=52&originHeight=52&originWidth=325&size=0&status=done&width=325

grep "0*" oldboy.txt        ### 查找0出现的次数

1562207009345-520f8c3c-cf54-4cbf-b1fc-fc8a48d922e4.png#align=left&display=inline&height=170&originHeight=170&originWidth=413&size=0&status=done&width=413

2.1.6 .*:匹配文件所有内容信息

grep "^m.*g" oldboy.txt grep "^m.*g " oldboy.txt

1562207009884-31fcff40-24a8-483c-aeea-508f7ad06e7d.png#align=left&display=inline&height=82&originHeight=82&originWidth=342&size=0&status=done&width=342
.*具有贪婪匹配,会匹配命令里所有m-g的内容,如第一条命令执行的结果。第二条命令在g后面空格,给予限制,所以第二条执行结果会是m-g空格的内容。

2.1.7 :还原字符的本来意思,转义符号

grep "\.$" oldboy.txt       ###  ".$":表示查询所有有字符的行信息  "\.$":表示查询出以点结尾的行信息 

1562207009599-08146e7b-2fe6-46f4-b1f2-8ca4bc91c336.png#align=left&display=inline&height=66&originHeight=66&originWidth=340&size=0&status=done&width=340
将没有意义的字符信息,变成有意义的信息:
\t: 制表符 \n: 换行符 \r: 换行符

echo -e "oldboy01\noldboy02"        ### \n: 换行符 

1562207009669-c2e2274c-d310-4976-9cbd-bd705f0dfcc1.png#align=left&display=inline&height=50&originHeight=50&originWidth=369&size=0&status=done&width=369

2.1.8 [] :匹配多个字符信息(或者关系)

grep [a-z] oldboy.txt

1562207009282-621bfd48-2d05-432a-b703-c07ae0d20a17.png#align=left&display=inline&height=140&originHeight=140&originWidth=391&size=0&status=done&width=391

2.1.9 [^]:排除指定的字符信息不要进行匹配

grep [^a-z] oldboy.txt  ###  显示除a-z的所有内容信息

1562207009403-809910f6-1c31-4493-b7e9-928cdc34b1e8.png#align=left&display=inline&height=137&originHeight=137&originWidth=394&size=0&status=done&width=394

2.2 扩展正则符号

扩展正则符号

2.2.1 +:匹配前一个字符连续出现1次或者多次

grep -E "0+" oldboy.txt

1562214365361-9d00e004-9817-477b-beae-7867cd35112e.png#align=left&display=inline&height=55&originHeight=55&originWidth=336&size=0&status=done&width=336

2.2.2 |:匹配的信息之间是或者的关系

grep -Ev "^$|^#" oldboy.txt    ### 除去空行信息,以#开头信息

-v:命令取反意思 ^$:空行 ^#:以#开头
1562214365360-21e87f58-393c-4be8-b6f3-8ec3bc6a19a9.png#align=left&display=inline&height=144&originHeight=144&originWidth=418&size=0&status=done&width=418
显示oldboy信息或者oldbey信息

grep -E "oldb(o|e)y" oldboy.txt

1562214365569-c696aabd-0cb7-44b8-925e-1d83a244538d.png#align=left&display=inline&height=70&originHeight=70&originWidth=383&size=0&status=done&width=383

2.2.3 ():将多个字符信息汇总为一个整体进行过滤

替换修改文件内容,后项引用前项

echo 123456|sed "s#123456#<123456>#g"

1562214365447-7a1ecddc-dafa-4cef-9c52-6e8ee4097ec7.png#align=left&display=inline&height=40&originHeight=40&originWidth=413&size=0&status=done&width=413

echo 123456|sed -r "s#(.*)#<\1>#g"

1562214365342-3e73068d-d1da-4745-b3c0-28ae9d58512b.png#align=left&display=inline&height=39&originHeight=39&originWidth=403&size=0&status=done&width=403
(.):匹配之前echo 123456的结果。也就是123456
\1:取用之前(.
)的内容

echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#\1#g"
echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#\1\2#g"
echo 123456|sed -r "s#(.)(.)(.)(.)(.)(.)#<\1>\2\3\4\5\6#g"

1562214365354-f5f5fef6-3014-461b-a6ed-3b389906455a.png#align=left&display=inline&height=94&originHeight=94&originWidth=577&size=0&status=done&width=577

2.2.4 {}:匹配前一个字符连续出现指定的次数

{n,m} :匹配前一个字符连续最少出现n次 最多出现m次
grep -E "0{3,5}" oldboy.txt :匹配0连续出现的次数
1562214365310-57ff5f17-45d0-4def-8a59-5bdd7fbcb88d.png#align=left&display=inline&height=49&originHeight=49&originWidth=356&size=0&status=done&width=356
grep -E "0{3,5}" oldboy.txt -o -o:显示命令执行过程
1562214365360-9f11b51c-c549-4e8d-baa4-92caa22fd67b.png#align=left&display=inline&height=54&originHeight=54&originWidth=370&size=0&status=done&width=370
{n} :匹配前一个字符连续正好出现n次
grep -E "0{3}" oldboy.txt 匹配0连续出现3次
1562214365365-664c059f-1890-4f93-a08c-dfc308e9aeff.png#align=left&display=inline&height=47&originHeight=47&originWidth=347&size=0&status=done&width=347
{n,}:匹配前一个字符连续最少出现n次,最多出现次数没有限制
grep -E "0{2,}" oldboy.txt 匹配0最少2次,最多没有限制
1562214365447-efdd1b7e-d4c5-4114-b930-fd8467d8dcf0.png#align=left&display=inline&height=55&originHeight=55&originWidth=351&size=0&status=done&width=351
grep -E "0{2,}" oldboy.txt -o
1562214365396-48575b7a-42de-4096-b9e3-82b0828012fb.png#align=left&display=inline&height=53&originHeight=53&originWidth=358&size=0&status=done&width=358
{,m}:匹配前一个字符连续最少出现0次,最多出现次数m次
grep -E "0{,4}" oldboy.txt
1562214365380-9ca011ef-593d-495e-b226-1ec72d76478b.png#align=left&display=inline&height=169&originHeight=169&originWidth=398&size=0&status=done&width=398

2.2.5 ?:匹配前一个字符连续出现0次或者1次

grep -E "o?" oldboy.txt

1562214365438-756edc44-f61c-4ef8-9b73-4b35cd8aaca9.png#align=left&display=inline&height=98&originHeight=98&originWidth=405&size=0&status=done&width=405

2.2.6 补充:* + ? 区别

*:匹配前一个字符连续出现0次或者多次
+:匹配前一个字符连续出现1次或者多次
?:匹配前一个字符连续出现0次或者1次
正则匹配信息:
(1)具有贪婪匹配特性:
(2)过滤时显示的信息不正确
grep过滤信息,过滤信息外面使用双引号
sed awk过滤信息,过滤信息外面使用单引号

3 练习题:如何取出IP地址

3.1 sed命令取ip

1、获取ip地址 ip address show eth0 =ip a s eth0
1562214365377-14684a38-0cc1-4ae1-8c34-1eec40fef414.png#align=left&display=inline&height=97&originHeight=112&originWidth=717&size=0&status=done&width=620
2、定位显示ip地址的信息行 ip a s eth0|sed -n '3p'
1562214365371-57c9ff5c-c409-4e88-8394-fd30c0877840.png#align=left&display=inline&height=38&originHeight=38&originWidth=415&size=0&status=done&width=415
3、取出指定ip指定信息 ip a s eth0|sed -n '3p'|sed -r "s#^.t (.)#\1#g"
1562214365444-3765b696-3c48-42e1-816b-15f011347b58.png#align=left&display=inline&height=37&originHeight=37&originWidth=500&size=0&status=done&width=500
ip a s eth0|sed -n '3p'|sed -r "s#^.t (.)#\1#g"|sed -r 's#(.)/24.$#\1#g'
1562214365416-e8365dbc-4834-4cc2-9940-b7af4916bb75.png#align=left&display=inline&height=36&originHeight=40&originWidth=690&size=0&status=done&width=620
ip a s eth0|sed -n '3p'=inet 10.0.0.201/24 brd 10.0.0.255 scope global eth0
sed -r "s#^.t (.)#\1#g"=10.0.0.201/24 brd 10.0.0.255 scope global eth0
sed -r 's#(.)/24.$#\1#g'=10.0.0.201
4、命令整合:
(1)

sed -r 's#^.*t (.*)#\1#g'
sed -r 's#(.*)/24.*$#\1#g'

sed -r 's#^.*t (.*)/24.*$#\1#g'
整合后:ip a s eth0|sed -n '3p'|sed -r 's#^.*t (.*)/24.*$#\1#g'

(2)

sed -n '3p'
sed -r 's#^.*t (.*)/24.*$#\1#g'

sed -nr '3s#^.*t (.*)/24.*$#\1#gp'
整合后:ip a s eth0|sed -nr '3s#^.*t (.*)/24.*$#\1#gp'

3.2 grep命令取ip

1、获取ip地址: ip address show eth0
1562214365432-fac9ba67-8ae7-43d0-8bef-a7b4730535e8.png#align=left&display=inline&height=97&originHeight=112&originWidth=717&size=0&status=done&width=620
2、定位显示ip地址的信息行 ip a s eth0|grep -w inet
w:匹配整词,精确地单词,单词的两边必须是非字符符号(即不能是字母数字或下划线)
1562214365660-c36a7bd1-d5ce-4abf-8ec1-7306b76f0aeb.png#align=left&display=inline&height=39&originHeight=39&originWidth=413&size=0&status=done&width=413
3、取出ip地址信息 ip a s eth0|grep -w inet|grep "[0-9]+.[0-9]+.[0-9]+.[0-9]+"
"[0-9]+.[0-9]+.[0-9]+.[0-9]+" 对应ip地址格式 +:匹配一个字符连续出现1次或者多次
1562214365807-9ca04bf1-68e5-4520-89dc-9d597e66ef55.png#align=left&display=inline&height=36&originHeight=36&originWidth=594&size=0&status=done&width=594
ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+" -o|head -1
1562214365811-32cca42b-1c33-4754-8439-48e42be64b1f.png#align=left&display=inline&height=34&originHeight=37&originWidth=669&size=0&status=done&width=620
-o:显示命令执行过程
head -1:之前结果取第一行
命令执行:
整合:ip a s eth0|grep -w inet|grep -E "[0-9]+.[0-9]+.[0-9]+.[0-9]+" -o
整合后:ip a s eth0|grep -w inet|grep -E "([0-9]+.){3}[0-9]+" -o
([0-9]+.){3}:[0-9]+.出现3次,将[0-9]+.看成一个整体加上()指定出现3次加上{}=([0-9]+.){3}
ip a s eth0|grep -w inet|grep -E "([0-9]+.){4}" -o
1562214365553-cd3e40d1-c04f-434a-8e3e-049258067a13.png#align=left&display=inline&height=51&originHeight=51&originWidth=508&size=0&status=done&width=508
"[0-9]+.[0-9]+.[0-9]+.[0-9]+" :在这里面,只有三次[0-9]+. 一次[0-9]+
将 "[0-9]+.[0-9]+.[0-9]+.[0-9]+" 变为"([0-9]+.){4}"实际上是多加了一个.(点)再执行命令中会显示出/
ip a s eth0|grep -w inet|grep -E "([0-9]+.?){4}" -o|head -1
这条命令中,要将.(点)取消
点===.?
\表示取点的特殊意义
?表示匹配前面字符出现0次或1次
"([0-9]+.?){4}"的结果为:10.0.0.201
10.0.0.255 取消之前的 / 了
再取第一行,也就是10.0.0.201了。

转载于:https://www.cnblogs.com/basa/p/11132349.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值