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.
. :匹配任意一个且只有一个字符
匹配任意一个以什么结尾的字符
匹配任意一个以什么开头的字符
匹配整个文件所有任意字符
[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
课程总结: 系统特殊符号 系统通配符号 系统正则符号
通配符号匹配信息作用:匹配文件名称信息* {}
正则符号匹配信息作用:匹配文件内容信息
基础正则: ^ $ . * ^$ .* [ ] [ ^]
扩展正则:+ | () {} ?