DAY 17 操作系统正则符号 三剑客grep

01课程介绍部分

1.系统通配符号

2.系统正则符号

02课程知识回顾

1.系统文件属性 (文件类型 权限信息 用户信息 inode/block 硬链接 软链接)

find -ls ---找到数据后显示数据属性

[root@oldboy66 ~]# find /oldboy -type f -ls(按照块显示文件大小)

33575009 4 -rw-r--r-- 1 root root 4 Jul 26 23:11 /oldboy/oldboy.txt

33689540 0 -rw-r--r-- 1 root root 0 Jul 28 09:41 /oldboy/oldboy1.txt

33689542 0 -rw-r--r-- 1 root root 0 Jul 28 09:41 /oldboy/oldboy2.txt

33689543 0 -rw-r--r-- 1 root root 0 Jul 28 09:41 /oldboy/oldboy3.txt

33689544 0 -rw-r--r-- 1 root root 0 Jul 28 09:41 /oldboy/oldboy4.txt

[root@oldboy66 ~]# find /oldboy -type f -ls|column -t----对齐

33575009 4 -rw-r--r-- 1 root root 4 Jul 26 23:11 /oldboy/oldboy.txt

33689540 0 -rw-r--r-- 1 root root 0 Jul 28 09:41 /oldboy/oldboy1.txt

33689542 0 -rw-r--r-- 1 root root 0 Jul 28 09:41 /oldboy/oldboy2.txt

33689543 0 -rw-r--r-- 1 root root 0 Jul 28 09:41 /oldboy/oldboy3.txt

33689544 0 -rw-r--r-- 1 root root 0 Jul 28 09:41 /oldboy/oldboy4.txt

[root@oldboy66 ~]# stat /etc/ 

 File: ‘/etc/’

 Size: 8192  Blocks: 24 IO Block: 4096 directory

Device: 803h/2051d Inode: 16777281 Links: 83

Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)

Access: 2019-07-27 04:40:20.091208195 +0800

Modify: 2019-07-27 01:00:28.409733868 +0800

Change: 2019-07-27 01:00:28.409733868 +0800

 Birth: -

[root@oldboy66 ~]# xfs_info /dev/sda3

meta-data=/dev/sda3 isize=512 agcount=4, agsize=1232320 blks

 = sectsz=512 attr=2, projid32bit=1

 = crc=1 finobt=0 spinodes=0

data = bsize=4096  blocks=4929280, imaxpct=25

 [root@oldboy66 ~]# echo 123456 >oldboy1.txt

[root@oldboy66 ~]# ll oldboy1.txt

-rw-r--r-- 1 root root 7 Jul 28 09:49 oldboy1.txt

[root@oldboy66 ~]# ll -sdih /etc/services

16777649 656K -rw-r--r--. 1 root root 655K Jun 7 2013 /etc/services

2.系统符号信息 : 基础符号系列

基础符号系列:#注释,root超级用户提示符 $普通用户提示符,调取变量 !取反 |管道 \转义符号

引号符号系列:

“”:输入即输出,会解析部分数据信息

‘’:所见即所得

``:先执行引号里面的将执行结果交由外面命令继续执行

没引号的:同双引号一样,可识别序列

路径符号系列:

~家目录提示符 - 上一次所在路径 ..上一级目录 .当前路径
重定向符号;> >> 2> 2>> < <<

正确错误信息追加到文件中:方法1:&>> /oldboy.log 方法2: >>/oldboy.log 2>&1

逻辑符号:

&&: 并且关系 前面命令执行成功,再执行后面的命令

||: 或者关系 前面命令执行失败,再执行后面的命令

; :多个命令同时执行

系统通配符号:

*: 匹配所有内容

ll /oldboy/*.txt---匹配以.txt结尾的详细信息

rm -f /oldboy/.old*.txt ---删除以old开头.txt结尾的所有隐藏文件

{}:匹配序列信息,可是数字序列,也可以是字母序列

 [root@oldboy66 ~]# echo {1..10}

1 2 3 4 5 6 7 8 9 10

[root@oldboy66 ~]# echo {01..10..2}

01 03 05 07 09

[root@oldboy66 ~]# echo {00..10..2}

00 02 04 06 08 10

[root@oldboy66 ~]# echo {a..z}

a b c d e f g h i j k l m n o p q r s t u v w x y z

  [root@oldboy66 ~]# echo {1,2}{A,B}

1A 1B 2A 2B

[root@oldboy66 ~]# echo {1..3}{A..C}

1A 1B 1C 2A 2B 2C 3A 3B 3C

[root@oldboy66 ~]# echo {1..3}{A..C}

1A 1B 1C 2A 2B 2C 3A 3B 3C

 [root@oldboy66 ~]# echo {1..3}{a..c}{A..C}

1aA 1aB 1aC 1bA 1bB 1bC 1cA 1cB 1cC 2aA 2aB 2aC 2bA 2bB 2bC 2cA 2cB 2cC 3aA 3aB 3aC 3bA 3bB 3bC 3cA 3cB 3cC

快速备份数据:

cp /oldboy/oldboy1/oldboy2/oldboy3/oldboy.txt{,.bak}

cp /oldboy/oldboy1/oldboy2/oldboy3/oldboy.txt /oldboy/oldboy1/oldboy2/oldboy3/oldboy.txt.bak

快速还原数据:

cp /oldboy/oldboy1/oldboy2/oldboy3/oldboy.txt{.bak,}

cp /oldboy/oldboy1/oldboy2/oldboy3/oldboy.txt.bak /oldboy/oldboy1/oldboy2/oldboy3/oldboy.txt

按日期备份的文件如何还原日志:

cp messages{-20190709,}

系统正则符号: 给grep sed awk 提供辅助

基础正则: BRE

扩展正则:ERE

终极目标:

01, 文件test.txt

张三:198404808500000

李四:288288989991232

王无:oldgirl

如何找出不合理身份证人员信息

02,如何过滤出IP地址

基础正则:

^:以什么开头的信息

[root@oldboy66 ~]# ll /etc/|grep "^d" ---过滤/etc中目录文件,以d 开头

drwxr-xr-x. 3 root root 101 Jun 21 20:09 abrt

drwxr-xr-x. 2 root root 236 Jun 21 20:09 alternatives

drwxr-x---. 3 root root 43 Jun 21 20:09 audisp

$:以什么结尾的信息

[root@oldboy66 ~]# grep "d$" /etc/selinux/config

SELINUX=disabled

解释说明: 如果结尾有空格信息的,过滤时会出现异常

利用底行模式 :set list 可以查看到结尾空行信息

利用命令cat -A /etc/selinux/config 看有没有空格存在

\:(不属于正则) 转义符号

1, 将有特殊意义的符号,还原本身符号的意义

[root@oldboy66 ~]# grep ".$" /etc/selinux/config

# This file controls the state of SELinux on the system.

# enforcing - SELinux security policy is enforced.

2, 将没有意义的字符,变为有意义的字符

\r \n :换行符

\t:制表符

[root@oldboy66 ~]# cat oldboy.txt

oldboy1oldoby2

[root@oldboy66 ~]# echo "oldboy1\noldoby2">oldboy.txt

[root@oldboy66 ~]# cat oldboy.txt

oldboy1\noldoby2

[root@oldboy66 ~]# echo -e "oldboy1\noldoby2">oldboy.txt

[root@oldboy66 ~]# cat oldboy.txt

oldboy1

oldoby2

3,取消别名功能: \rm

^$: 空行信息

  [root@oldboy66 ~]# grep -v (取反)"^$" /etc/selinux/config

\# This file controls the state of SELinux on the system.

\# SELINUX= can take one of these three values:

\# enforcing - SELinux security policy is enforced.

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

匹配任意一个以什么结尾的字符

2.png

匹配任意一个以什么开头的字符


3.png

匹配整个文件所有任意字符

[root@oldboy66 ~]# grep -o "^." /etc/selinux/config

S

[root@oldboy66 ~]# grep -o "." /etc/selinux/config

T

h

i

s

总结: 匹配筛选文件信息

1,会按行进行匹配

2,匹配信息会有贪婪特性

3,利用grep -o可以查看匹配信息的过程

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

[root@oldboy66 ~]# cd /oldboy

[root@oldboy66 oldboy]# grep -o "0*" oldboy.txt

000

00000

.* : 匹配所有字符包括空行

      [root@oldboy66 oldboy]# grep ".*" oldboy.txt -o

I am oldboy teacher!

I teach linux.

I like badminton ball ,billiard ball and chinese chess!

my blog is http://oldboy.blog.51cto.com

[ ]: 匹配中括号中任意字符

[root@oldboy66 oldboy]# grep "ab" oldboy.txt ---表示过滤一个字符串

[root@oldboy66 oldboy]# grep "[abc]" oldboy.txt

[图片上传失败...(image-be46e8-1564221436077)]

滤出所有小写字母:

[root@oldboy66 oldboy]# grep "[a-z]" oldboy.txt --- 过滤小写字母

[root@oldboy66 oldboy]# grep "[A-Z]" oldboy.txt --- 过滤大写字母

[root@oldboy66 oldboy]# grep "[a-zA-Z]" oldboy.txt --- 过滤所有字母

[root@oldboy66 oldboy]# grep "[a-Z]" oldboy.txt --- 过滤所有字母

[root@oldboy66 oldboy]# grep -i "[a-z]" oldboy.txt --- grep - i忽略大小写进行过滤

系统扩展正则:(高级符号) 三剑客识别需加参数 egrep / grep -E sed -r

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

[root@oldboy66 oldboy]# egrep "0+" oldboy.txt

my qq num is 49000448.

not 4900000448.

       [root@oldboy66 oldboy]# grep -E "[0-9]+" test.txt

张三:198404808500000

李四:288288989991232

[root@oldboy66 oldboy]# grep -vE "[0-9]+" test.txt

王无:oldgirl

| :匹配多个字符串信息

匹配oldboy和oldgirl单词信息

1, [root@oldboy66 oldboy]# grep "oldb[oe]y" oldboy.txt

I am oldboy teacher!

my blog is http://oldboy.blog.51cto.com

my god ,i am not oldbey,but OLDBOY

2,[root@oldboy66 oldboy]# grep "oldb.y" oldboy.txt

I am oldboy teacher!

my blog is http://oldboy.blog.51cto.com

my god ,i am not oldbey,but OLDBOY

3, [root@oldboy66 oldboy]# grep -E "oldboy|oldbey" oldboy.txt

I am oldboy teacher!

my blog is http://oldboy.blog.51cto.com

my god ,i am not oldbey,but OLDBOY

企业应用:配置文件中有注释有空行,如何取消注释和空行

[root@oldboy66 oldboy]# grep -vE "$|#" /etc/services

iqobject 48619/tcp # iqobject

iqobject 48619/udp # iqobject

matahari 49000/tcp # Matahari Broker

() :将多个字符信息进行整合过滤 难点 [root@oldboy66 oldboy]# egrep "(old)" oldboy.txt

I am oldboy teacher!

my blog is http://oldboy.blog.51cto.com

实现后项应用前项进行替换 常用 配合sed 命令使用时,可以实现后项引用前项

[root@oldboy66 oldboy]# echo "123"|sed -r 's#([0-9]+.)#<\1>#g'

<123>

[root@oldboy66 oldboy]# echo "123"|sed -r 's#(.)(.)(.)#<\1><\2><\3>#g'

<1><2><3>

[root@oldboy66 oldboy]# echo "1234567"|sed -r 's#([0-9])#<\1>#g'

<1><2><3><4><5><6><7>

说明:后项引用前项只能引用1-9个小括号

解决如何批量创建用户: 通过后项引用前项实现批量创建用户

useradd oldboy01;echo 123456|passwd --stdin oldboy01

[root@oldboy66 oldboy]# seq -w 10|sed -r 's#(.*)#useradd oldboy\1;echo 123456|passwd --stdin oldboy\1#g'

[root@oldboy66 oldboy]# seq -w 10|sed -r 's#(.*)#useradd oldboy\1;echo 123456|passwd --stdin oldboy\1#g'|bash

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

{n,m}:匹配前一个字符连续出现至少n次,最多m 次

{,m}:匹配前一个字符连续出现至少0次,最多m 次

{n}:匹配前一个字符连续出现正好n次

{n,}: 匹配前一个字符连续出现至少n次,最多不限

[root@oldboy66 oldboy]# egrep "0{2,5}" oldboy.txt

kog 000

my qq num is 49000448.

not 4900000448.

[root@oldboy66 oldboy]# egrep "0{2,5}" oldboy.txt -o

000

000

00000

[root@oldboy66 oldboy]# egrep "0{1,3}" oldboy.txt

kog 000

my qq num is 49000448.

not 4900000448.

[root@oldboy66 oldboy]# egrep "0{3}" oldboy.txt ---0正好出现3次

kog 000

my qq num is 49000448.

not 4900000448.

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

总结: * 连续出现0/多次 +连续出现1/多次 ?连续出现0/1次

[root@oldboy66 oldboy]# egrep "o*" test1.txt

by

boy

booy

boooy

booooy

[root@oldboy66 oldboy]# egrep "o+" test1.txt

boy

booy

boooy

booooy

[root@oldboy66 oldboy]# egrep "o?" test1.txt

by

boy

booy

boooy

booooy

课程总结: 系统特殊符号 系统通配符号 系统正则符号

通配符号匹配信息作用:匹配文件名称信息* {}

正则符号匹配信息作用:匹配文件内容信息

基础正则: ^ $ . * ^$ .* [ ] [ ^]

扩展正则:+ | () {} ?

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容