系统正则符号概念
系统基础符号
基础符号系列:
a 表示注释信息
b 表示登录用户信息 (root用户登录 提示符#)
$
a 表示登录用户信息 (普通用户登录 提示符$)
b 表示调取变量信息 $oldboy
c 表示调取列信息 awk ‘{print $1}’ /oldboy/oldboy.txt
!
a 表示强制意思 :wq! :q!
b 表示取反操作 find /oldboy -type f ! -path /oldboy/oldboy01*/
c 用于调取历史命令 !历史命令信息
|
将前一个命令执行的结果,交给后面命令处理
引号符号系列:
’ ’
单引号: 所见即所得
" "
双引号: 会将部分符号信息做解析处理
没引号
和双引号功能类似 识别序列信息
``
反引号: 等价于$() 将命令执行的结果交给外面的命令处理
路径符号系列:
~
快速切换到用户家目录 cd ~/cd
快速切换到上一次所在路径 cd -/cd $OLDPWD
.
切换到当前所在路径 cd .
…
切换到一级所在路径 cd … / cd …/…/
定向符号系列:
1>/> : 标准输出重定向
1>>/>> : 标准输出追加重定向
2> : 错误输出重定向
2>> : 错误输出追加重定向
错误和正确信息统一放置在一个文件:
echo oldboy >>/oldboy/ok.log 2>&1
echo oldboy &>>/oldboy/ok.log
< : 标准输入重定向
tr ‘a-z’ ‘A-Z’ </oldboy/oldboy.txt
xargs -n2 </oldboy/oldboy.txt
<< : 标准输入追加重定向
cat >>/oldboy.txt<<EOF
逻辑符号系列:
&&: 表示前一个命令执行成功,再执行后面命令
mkdir /oldboy && touch /oldboy/oldboy01.txt
||: 表示前一个命令执行失败,在执行后面命令
rmx /oldboy || touch /oldboy/oldboy02.txt
; 多个命令同时执行
系统通配符号:
- — 匹配所有内容
ls -l /oldboy/.txt — 匹配以.txt结尾信息进行详细显示
rm -rf /oldboy/ — 删除oldboy目录中所有信息, 但是默认无法删除隐藏文件
rm -f /oldboy/.old*.txt — 删除以old开头 .txt结尾的所有隐藏文件
find /oldboy -name “.txt"
find /oldboy -name "oldboy”
find /oldboy -name “old*.txt”
{} — 匹配序列信息
数字序列: — {1…9}
字母序列: — {a…z}
组合序列: —{1,4}{a,c}
快速备份数据
cp /oldboy/oldboy01/oldboy02/oldboy03/oldboy04/oldboy.txt{,.bak}
cp /oldboy/oldboy01/oldboy02/oldboy03/oldboy04/oldboy.txt /oldboy/oldboy01/oldboy02/oldboy03/oldboy04/oldboy.txt.bak
快速还原数据
cp /oldboy/oldboy01/oldboy02/oldboy03/oldboy04/oldboy.txt{.bak,}
cp /oldboy/oldboy01/oldboy02/oldboy03/oldboy04/oldboy.txt.bak /oldboy/oldboy01/oldboy02/oldboy03/oldboy04/oldboy.txt
cp messages{-20190707,}
系统正则符号: (适用于grep sed awk)
基础正则: (basic regular expression) BRE
^ — 以什么开头的信息
# ll /etc/|grep “^d”
drwxr-xr-x. 3 root root 101 Jul 3 20:25 abrt
drwxr-xr-x. 2 root root 252 Jul 17 18:13 alternatives
drwxr-x—. 3 root root 43 Jul 3 20:26 audis
$ — 以什么结尾的信息
# grep ‘d$’ /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
注意: 如果结尾有空格信息, 过滤是会出现异常
利用底行模式:set list 可以查看结尾空格信息
利用命令查看:cat -A /etc/selinux/config
问题: 将以点结尾的信息过滤出来:
grep ‘.$’ /etc/selinux/config
\ (不属于正则) — 转义符号
将有特殊意义的符号, 还原本身符号意义
将没有意义的字符,变为有意义
\r \n — 换行符
[root@oldboyedu ~]# echo -e “oldboy01\noldboy02” >oldboy.txt
[root@oldboyedu ~]# cat oldboy.txt
oldboy01
oldboy02
\t — 指表符
取消别名功能
4.可以将扩展正则转换为普通正则
[root@oldboyedu ~]# echo “100000 oldboy”|egrep “[0-9]+”
100000 oldboy
[root@oldboyedu ~]# echo “100000 oldboy”|grep “[0-9]+”
100000 oldboy
^$ — 空行信息
grep -v “^
"
/
e
t
c
/
s
e
l
i
n
u
x
/
c
o
n
f
i
g
.
—
匹
配
任
意
一
个
且
只
有
一
个
字
符
g
r
e
p
"
.
"
/
e
t
c
/
s
e
l
i
n
u
x
/
c
o
n
f
i
g
−
−
−
匹
配
任
意
一
个
以
什
么
开
头
的
字
符
g
r
e
p
"
.
" /etc/selinux/config . — 匹配任意一个且只有一个字符 grep "^." /etc/selinux/config --- 匹配任意一个以什么开头的字符 grep ".
"/etc/selinux/config.—匹配任意一个且只有一个字符grep"."/etc/selinux/config−−−匹配任意一个以什么开头的字符grep".” /etc/selinux/config — 匹配任意一个以什么结尾的字符
grep “.” /etc/selinux/config — 匹配整个文件所有任意字符
总结匹配筛选文件信息:
- 会按照行进行匹配
- 贪婪特性
- 利用grep -o可以查看匹配信息的过程
-
— 匹配前一个字符连续出现0次或者多次
创建一个测试文件:
创建测试文件: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!
匹配文件中数字0信息
[root@oldboyedu oldboy]# grep “0*” oldboy.txt
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!
[root@oldboyedu oldboy]# grep -o "0*" oldboy.txt
000
00000
.* — 匹配文件中所有信息
[root@oldboyedu 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
our site is http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[] — 匹配中括号中任意一个字符
[root@oldboyedu oldboy]# grep “ba” oldboy.txt — 表示过滤一个字符串
I like badminton ball ,billiard ball and chinese chess!
[root@oldboyedu oldboy]# grep “[bac]” oldboy.txt
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 god ,i am not oldbey,but OLDBOY!
过滤出所有小写字母:
grep "[a-z]" oldboy.txt --- 过滤小写字母
grep "[A-Z]" oldboy.txt --- 过滤大写字母
grep "[a-zA-Z]" oldboy.txt --- 过滤所有字母
grep "[a-Z]" oldboy.txt --- 过滤所有字母
grep -i "[a-z]" oldboy.txt --- grep忽略大小写进行过滤
[^] — 将括号内指定字符信息,进行取反过滤
[root@oldboyedu oldboy]# grep -v “[a-Z]” oldboy.txt
[root@oldboyedu oldboy]# grep "[^a-Z]" oldboy.txt
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!
扩展正则: (extended regular expression) ERE,需要使用grep --> egrep/grep -E sed --> sed -r
- — 匹配前一个字符连续出现1次或者多次
egrep s+ /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.
permissive - SELinux prints warnings instead of enforcing.
disabled - No SELinux policy is loaded.
SELINUX=disabled
SELINUXTYPE= can take one of three values:
targeted - Targeted processes are protected,
minimum - Modification of targeted policy. Only selected processes are protected.
mls - Multi Level Security protection.
| — 匹配多个字符串信息
匹配oldboy和oldbey单词信息
egrep “oldboy|oldbey” oldboy.txt
企业应用: 配置文件有注释有空行, 如何进行取消
grep -vE “^$ | ^#” /etc/services
() — 将多个字符信息进行整合过滤
第一个作用实践说明
鸡肋——
[root@oldboyedu oldboy]# grep [old] oldboy.txt
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 0 http://www.etiantian.org
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu oldboy]# egrep "(old)" oldboy.txt
I am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
第二个作用: 配合sed命令使用时,可以实现后项引用前项
\color{red}{记住后项只引用括号里面的内容}
echo “123456”|sed -r ‘s#([0-9]+)#<\1>#g’
<123456>
echo “1234567890”|sed -r ‘s#([0-9])#<\1>#g’
echo “789”|sed -r ‘s#(.)(.)(.)#<\1><\2><\3>#g’
<7><8><9>
说明: 后项引用前项只能引用1-9个小括号
{} 匹配前一个字符连续出现指定的次数
{n,m} — 匹配前一个字符连续出现至少n次 最多m次
[root@oldboyedu oldboy]# grep -E “0{2,4}” oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu oldboy]# grep -E “0{2,4}” oldboy.txt -o
000
0000
[root@oldboyedu oldboy]# grep -E “0{1,3}” oldboy.txt -o
0
000
000
00
[root@oldboyedu oldboy]# grep -E “0{1,3}” oldboy.txt
our site is 0 http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
{n} — 匹配前一个字符连续出现正好n次
[root@oldboyedu oldboy]# grep -E “0{3}” oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu oldboy]# grep -E “0{2}” oldboy.txt
my qq num is 49000448.
not 4900000448.
{n,} — 匹配前一个字符连续出现最少n次, 最多不限
{,m} — 匹配前一个字符连续出现最少0次, 最多是m次
[root@oldboyedu oldboy]# grep -E “0{3,}” oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu oldboy]# grep -E “0{,3}” oldboy.txt
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 0 http://www.etiantian.org
my qq num is 49000448.
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
? — 匹配前一个字符连续出现0次或者1次
[root@oldboyedu oldboy]# egrep “o*” test02.txt
gd
god
good
goood
gooood
[root@oldboyedu oldboy]# egrep “o+” test02.txt
god
good
goood
gooood
[root@oldboyedu oldboy]# egrep “o?” test02.txt
gd
god
good
goood
gooood
[root@oldboyedu oldboy]# egrep “o?” test02.txt -o
o
o
o
o
o
o
o
o
o
o
总结:
通配符号: 匹配文件名称信息
正则符号: 匹配文件内容信息