1.特殊符号

‘’ 所见即所得,吃啥吐啥
“” 特殊符号会被解析运行
`` ==== $() 先运行里面的命令 把结果留下

  1. 重定向符号 先清空文件的内容 然后追加文件的最后<br />>> 追加重定向 追加文件的最后<br />2> 错误重定向 只有错误的信息 才会通过这个漏洞进入文件中<br />2>> 错误追加重定向

~ 当前用户的家目录
root ~ /root
oldboy ~ /home/oldboy
! 查找并运行历史命令
!awk 包含awk 的命令 最近的一条运行
history |grep awk
# 注释
root 用户的命令提示符

$ 取出变量的内容
awk $取某一列的内容
普通用户的命令提示符
* 所有 任何东西
\ 撬棍 转义字符

&& 前一个命令执行成功然后在执行后一个命令
ifdown eth0 && ifup eth0

|| 前一个命令支持失败了再执行后面的命令

[root@oldboyedu ~]# eco && echo ok            # 第一个命令没找到,没有执行第二个命令。
-bash: eco: command not found
[root@oldboyedu ~]# eco || echo ok            # 第一个命令没找到,执行第二个命令。
-bash: eco: command not found
ok

2.通配符

通配符是用来查找文件的。 以.txt 结尾的文件 .txt .log

2.1*:所有,任意

找出文件名包含oldboy 的文件
环境准备:

[root@oldboyedu ~]# mkdir -p /oldboy/
[root@oldboyedu ~]# cd /oldboy/
[root@oldboyedu oldboy]# touch oldboy.txt oldboy oldboyfile oldboy.awk eduoldboy

找出指定的文件:

[root@oldboyedu oldboy]# find /oldboy/ -type f -name "oldboy"    # 找oldboy文件。
/oldboy/oldboy
[root@oldboyedu oldboy]# find /oldboy/ -type f -name "*oldboy"    # 找以oldboy结尾的文件。
/oldboy/oldboy
/oldboy/eduoldboy
[root@oldboyedu oldboy]# find /oldboy/ -type f -name "*oldboy*"    # 找含有oldboy的文件。
/oldboy/oldboy.awk
/oldboy/oldboyfile
/oldboy/oldboy
/oldboy/oldboy.txt
/oldboy/oldboy.txt-hard
/oldboy/eduoldboy

2.2 {}:生成序列

[root@oldboyedu oldboy]# echo {1..6}
1 2 3 4 5 6
[root@oldboyedu oldboy]# 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@oldboyedu oldboy]# echo {01..10}
01 02 03 04 05 06 07 08 09 10
[root@oldboyedu oldboy]# echo stu{01..10}
stu01 stu02 stu03 stu04 stu05 stu06 stu07 stu08 stu09 stu10

通过 {} 进行备份

[root@oldboyedu01-nb oldboy]# echo A{B,C}
AB AC
[root@oldboyedu01-nb oldboy]# echo A{,C}
A AC
[root@oldboyedu01-nb oldboy]# echo oldboy.txt{,.bak}
oldboy.txt oldboy.txt.bak
[root@oldboyedu01-nb oldboy]# touch oldboy.txt
[root@oldboyedu01-nb oldboy]# cp oldboy.txt{,.bak}        # 把oldboy.txt 复制为oldboy.txt.bak
[root@oldboyedu01-nb oldboy]# ls l oldboy.txt*
-rw r r ----. 2 root root 29 Oct 18 07:42 oldboy.txt
-rw r r 1 root root 29 Oct 18 07:42 oldboy.txt.bak
-rw r r ----. 2 root root 29 Oct 18 07:42 oldboy.txt hard
lrwxrwxrwx 1 root root 10 Oct 17 09:27 oldboy.txt soft --> oldboy.txt

3.基础正则表达式

1) 什么是正则?为何使用它?
通过符号表示文字内容。提高效率,省事。
支持正则表达式 :Linux 三剑客 grep sed awk
练习:识别身份证号码

[root@oldboyedu oldboy]# cat id.txt         # 环境准备。
110000197907030484
110ddd197902181654
110000198510204911
110000197908083836
11000019860ddd9605
110000199410252806
110000199003296713
110000197510314892
110000198209062811
110asdf98209062811
11000019820dddd811
110000198209062811
110000198307170496
110000198909149301
110000198810098735
110000199007021063
11000019781119429X
110000199103081090
110000198aa0300201

[root@oldboyedu oldboy]# egrep "^[0-9X]+$" id.txt         # 过滤出身份证号码
110000197907030484
110000198510204911
110000197908083836
110000199410252806
110000199003296713
110000197510314892
110000198209062811
110000198209062811
110000198307170496
110000198909149301
110000198810098735
110000199007021063
11000019781119429X
110000199103081090

2) 使用正则的时候注意事项
#1] 正则表达式是按照行进行处理的
#2] 禁止使用中文符号
#3] 给 grep 和 egrep 配置别名

cat >>/etc/profile<<EOF                # 给grap设置别名。
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
EOF
source /etc/profile                    # 使配置生效。

# 再次使用grep,egrep的时候,会将过滤出来的内容自动添加上颜色。

3) 正则表达式与通配符区别
用途 匹配的内容 支持的命令
通配符————用来匹配查找文件名 .txt .log 以 .txt .log 结尾的文件,大部分命令都可以使用
正则—————在文件中匹配查找内容 包含 oldboy 的行,Linux 三剑客:grep,sed,awk

4) 正则表达式分类
基础正则 ^ $ . * [] [^] basic regular expression BRE grep sed awk
扩展正则 | + {} () ? extended regular expression ERE grep -E/egrep sed -r awk

5) 准备环境

cat 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!

6) 基础正则
#1]. ^ 以…. 开头的行

[root@oldboyedu oldboy]# grep  '^m' oldboy.txt        # 找出以m开头的行。
my blog is http://oldboy.blog.51cto.com
my qq num is 49000448.
my god ,i am not oldbey,but OLDBOY!

2]. $ 以 ….结尾的 行

[root@oldboyedu oldboy]# grep  'm$' oldboy.txt        # 找出以m结尾的行。
my blog is http://oldboy.blog.51cto.com

3]. ^$ 空行 这一行中没有任何的符号

[root@oldboyedu oldboy]# grep  '^$' oldboy.txt

排除文件中的空行

[root@oldboyedu oldboy]# grep -v '^$' oldboy.txt

4]. 点 ) 任意一个字符 不包含空行
-o 表示 grep 的执行过程 正则每次匹配到了什么?
找出文件中以点结尾的行

[root@oldboyedu oldboy]# grep  '\.$' oldboy.txt
I teach linux.
my qq num is 49000448.
not 4900000448.

5]. 撬棍 ) 转义符号 脱掉马甲,打回原形
\n 表示回车换行

6]. * 前一个字符连续出现了 0 次或 1 次以上 >=0

[root@oldboyedu oldboy]# grep  '0*' oldboy.txt
 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!

Linux正则表达式之问题 1:为何会取出 000 而不是 00 和 0 0 0 0?
因为正则在表示 连 续出现的时候表现出贪婪性,有多少吃多少,有多少匹配多少。
Linux正则表达式之问题 2:为何使用 ‘0‘ 会把整个文件的内容都显示出来?
#A
表示
连续出现了 0 次 A ==== 什么也没有,就会把整个文件的内容都显示出来
A连续出现了 1 次以上 A

7]. .* 所有字符 所有符号 所有 (并且)
正则中表示连续出现 或 所有的时候 贪婪性 有多少匹配多少
练习:找出文件中以 m 开头的行并 且以 m 结尾的行

[root@oldboyedu oldboy]# grep '^m.*m$' oldboy.txt        
my blog is http://oldboy.blog.51cto.com

8]. [] 中括号 [abc] 相当于是一个字符 找出包含 a 或 b 或 c 的行

[root@oldboyedu oldboy]# grep '[abc]' oldboy.txt
 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!

[root@oldboyedu oldboy]# grep '[a-zA-Z0-9]' oldboy.txt

练习3: 以 m 或 n 或 o 开头的 并且以 m 或 g 结尾的行

[root@oldboyedu oldboy]# grep '^[mno].*[mg]$' oldboy.txt
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org

[root@oldboyedu oldboy]# grep '^[m,n,o].*[mg]$' oldboy.txt
# 逗号只表示逗号,多个逗号也只表示一个。
my blog is http://oldboy.blog.51cto.com
our site is http://www.etiantian.org

9]. [^] [^abc] 排除 a 或 b 或 c 的内容

[root@oldboyedu oldboy]# grep '[^abc]' oldboy.txt

# 基础正则小结
##1)) ^ $ ^$ . . []
##2)) grep grep -o

4.扩展正则表达式

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

1]. 前一个符号连续出现了 1 次或多次

[root@oldboyedu oldboy]# egrep '0' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu oldboy]# egrep '0+' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu oldboy]# egrep '0+' oldboy.txt -o
000
00000
[root@oldboyedu oldboy]# egrep '0' oldboy.txt -o
0
0
0
...

把文件中连续出现的小写字母取出来

[root@oldboyedu oldboy]# egrep '[a-z]+' oldboy.txt 
 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]# egrep '[a-z]+' oldboy.txt -o
am
oldboy
teacher
teach
...

小结:
1. 可以把连续的东西通过正则取出来
2. 一般与 配合

2]. | 或者
练习:取出’oldboy|linux’

[root@oldboyedu oldboy]# egrep 'oldboy|linux' oldboy.txt 
 am oldboy teacher!
I teach linux.
my blog is http://oldboy.blog.51cto.com

[root@oldboyedu oldboy]# egrep 'oldboy|linux' oldboy.txt -o
oldboy
linux
oldboy

Linux 正则表达式之问题 3 ::[] 与 | 区别
都可以表示或者 [abc] a|b|c
区别:
1.[] 基础正则 扩展正则
2.[] 表示的是单个字符或者 单个字符的或多个字符的都可
[a z] oldboy|linux

3]. () 括号中的内容相当于是一个整体 后向引用(反向引用)

[root@oldboyedu oldboy]# egrep 'oldb(o|e)y' oldboy.txt 
 am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!

先乘除再加减,有括号的先算括号里面的。
后向引用,反 向引用
sed ,把你想要的内容先保护起来(通过小括号),然后再使用他。
.*表示所有
图片.png

4]. o{n,m} 前一个字符连续出现了至少 n 次,最多 m 次。
o{n} 前一个字符连续出现了 n 次
o{n,} 前一个字符连续出现 了至少 n 次
o{,m} 前一个字符连续出现了最多 m 次

[root@oldboyedu oldboy]# egrep '0{1,4}' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu oldboy]# egrep '0{1,4}' oldboy.txt -o
000
0000
0

# 0数字出现3-4次
[root@oldboyedu oldboy]# egrep '0{3,4}' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu oldboy]# egrep '0{3,4}' oldboy.txt -o
000
0000

# 0-9数字出现8次以上
[root@oldboyedu oldboy]# egrep '[0-9]{8,}' oldboy.txt
my qq num is 49000448.
not 4900000448.
[root@oldboyedu oldboy]# egrep '[0-9]{8,}' oldboy.txt -o
49000448
4900000448

5]. ? 表示前一个字符连续出现 0 次或 1 次

[root@oldboyedu oldboy]# egrep 'ol?d' oldboy.txt 
 am oldboy teacher!
my blog is http://oldboy.blog.51cto.com
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu oldboy]# egrep 'ol?d' oldboy.txt -o
old
old
od
old

5.正则表达式总结

连续出现、重复

  • =0
    + >=1
    ? 0 1
    {n,m} >=n <=m
    {n} ==n
    其他
    . 任意一个字符
    [abc] 一个整体 相当于是一个字符
    [a z] [0 9] [A Z]
    [^abc] 排除
    | 或者
    () 后向引用 反向引用 先保护再使用
    .* 所有
    ^$ 空行

  • 基础正则与扩展正则区别

支持基础正则 基础 + 扩展
grep egrep === grep -E
sed sed -r
awk awk