正则表达式/通配符/归档

目录: 

第1章 三剑客之一 awk
1.1 awk字符参数统计表
1.2 参数字符举例


第2章 三剑客之二 sed
2.1 sed字符参数统计表
2.2 参数字符举例


第3章 三剑客之三 grep
3.1 参数字符统计表
3.2 参数字符举例

第4章 通配符
4.1 通配符统计表格
4.2 通配符举例


第5章 特殊符号
5.1 特殊符号统计表


第6章 三剑客的正则表达式
6.1 正则表达式的定义
6.2 正则表达式的运用区分通配符
6.3 正则表达式的注意事项
6.4 正则表达式的分类
6.5 三剑客正则表达式字符统计表

 

 

三剑客特殊字符及参数归档

第1章 三剑客之一 awk

命令解释awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。

1.1 awk字符参数统计表


1.2 参数字符举例

1.2.1 NR例

题意:取出ett.txt 中第25行到第30行

[root@oldboy34 data]# awk 'NR>=25&&NR<=30' ett.txt

25

26

27

28

29

30

1.2.2 ! 例

awk '!/oldboy/' test.txt

test

liyao

1.2.3 '{print $2,$3}' 列

表示取出第2例和第3例

[root@oldboy-muban data]# ls -l 

total 20 

drwxr-xr-x. 2 root root 4096 Jan 6 17:56 a 

drwxr-xr-x. 2 root root 4096 Jan 6 17:56 b 

drwxr-xr-x. 2 root root 4096 Jan 6 17:56 c 

drwxr-xr-x. 2 root root 4096 Jan 6 17:56 d 

-rw-r--r--. 1 root root 97 Dec 23 19:45 oldboy.txt 

[root@oldboy-muban data]# ls -l |awk '{print $2,$3}' 

20 

2 root 

2 root 

2 root 

2 root 

1 root
1.2.4 . (点) 例

取全部

1.2.5 '$2>1' 例

ls -l |awk '$2>1' 显示出第二列数值>1 的每行

[root@oldboy-muban ~]# ls -l |awk '$2>1'

total 36

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 a

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 b

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 c

1.2.6 -F "" 例

常用格式 awk -F " 指定内容" '{print $4第四行,$6 }’ oldboy.txt

[root@oldboy-muban oldboy]# cat oldboy.txt

I am oldboy,myqq is 31333741

[root@oldboy-muban ~]# awk -F "[ ,]" '{print $3,$6}' /oldboy/oldboy.txt

oldboy 31333741

1.2.7 -F "[ ]" 例

-F "[空格 ,]" 指定多把菜刀 分别以 空格和 ,号当分割符号

[root@oldboy-muban ~]# awk -F "[ ,]" '{print $3,$6}' /oldboy/oldboy.txt

oldboy 31333741

1.2.8 '{print $3" 12345 "$6}'例

显示列中插入 12345 但是显示内容要加 '' "

[root@oldboy-muban oldboy]# awk -F "[ ,]" '{print $3" 12345 "$6}' oldboy.txt

oldboy 12345 31333741

1.2.9 NR $n组合 例

print 和NR 组合为输出的列显示行号

NR表示行号(第几行) $0 表示整列(表示取第几列)

[root@oldboy-muban logs]# echo stu{1..6} |xargs -n2 >ett.txt 插入两行

[root@oldboy-muban logs]# cat ett.txt

stu1 stu2

stu3 stu4

stu5 stu6

[root@oldboy-muban ~]# awk '{print NR,$0}' nginx.conf (NR表示第几行开始标记行号$0表示全部列)

1 stu1 stu2

2 stu3 stu4

3 stu5 stu6

[root@oldboy-muban ~]# awk '{print NR,$2}' nginx.conf ($2 第二列 并默认从头行标号)

1 stu2

2 stu4

3 stu6

[root@oldboy-muban ~]# awk '{print NR==1,$2}' nginx.conf (NR==1给指定行标注1

1 stu2

0 stu4

0 stu6

1.2.10 '/ ^d/' 例

awk '/ ^d/' ( ^ 特殊字符 表示以d开头的文件或字符)

所以:ls -l | awk '/^d /'

[root@oldboy-muban ~]# ls -l

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 a

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 b

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 c

-rw-r--r--. 1 root root 0 Jan 3 10:15 jeacen

-rw-r--r--. 1 root root 0 Jan 9 16:35 nginx.conf

drwxr-xr-x. 7 root root 4096 Jan 3 10:15 oldboy

[root@oldboy-muban ~]# ls -l |awk '/^d/'

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 a

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 b

drwxr-xr-x. 2 root root 4096 Jan 3 10:11 c

第2章 三剑客之二 sed

命令解释:sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

2.1 sed字符参数统计表

2.1.2 指定范围

2.1.3特殊符号小结

2.2 参数字符举例

2.2.1 用sed 删除文件1.txt中的空行

##删除文件中的空行两种方法

方法一: sed  -r  '/^$|^[ ]+$/d

方法二: sed  -r  '/^[ ]*$/d'

环境如下

[root@oldboy-muban ~]# cat  1.txt

oldboy

 

zhabanzhang

           

    zbanz

 

oldboy

 

[root@oldboy-muban ~]# cat -A 1.txt

oldboy$

$

zhabanzhang$

^I^I^I$

^Izbanz$

$

oldboy$

 

方法一:

[root@m01 ~]# sed  -r  '/^$|^[ ]+$/d' 1.txt

oldboy

zhabanzhang

    zbanz

oldboy

方法二:

[root@m01 ~]# sed -r '/^[ ]*$/d' 1.txt

oldboy

zhabanzhang

    zbanz

oldboy

2.2.2 删除连续多行演示 ,号

[root@oldboy-muban ~]# sed 'd' person.txt

[root@oldboy-muban ~]# sed '2,3d' person.txt

101,oldboy,CEO

104,yy,CFO

105,feixue,CIO

[root@oldboy-muban ~]# sed '2,3!d' person.txt

102,zhangyao,CTO

103,Alex,COO

2.3.3 删除不连续行 ;号

[root@oldboy-muban ~]# sed '3d;5d' person.txt

101,oldboy,CEO

102,zhangyao,CTO

104,yy,CFO

注意:正则不确定性 工作中用数字删

2.2.4 w另存

[root@oldboy-muban ~]# sed 'w oldboy123.txt' person.txt

101,oldboy,CEO

102,zhangyao,CTO

103,Alex,COO

104,yy,CFO

105,feixue,CIO

[root@oldboy-muban ~]# ls

01       1.txt.bak  anaconda-ks.cfg  install.log  oldboy123.txt  pass.txt    person.txt  wangxiaog.txt   wxd.sh

                                                    

2.2.5 -n p 例

该命令一起使用表示只打印那些发生替换的行(取消默认输出)

   格式:sed  -n  ' 20p'  

只查看ett.txt文件(共100行)内第20到第30行的内容

[root@oldboy34 data]# sed -n  '20,30p' ett.txt

20

21

22

23

24

25

26

27

28

29

30

2.2.6 's###g' 例

[root@oldboy-muban data]# cat ett.txt

I am oldboy,myqq is 31333741

[root@oldboy-muban data]# sed "s#,myqq is# #g" ett.txt |sed "s#I am##g"

 oldboy  31333741

2.2.7 sed -r 's#.(.).(.).(.)#123#g' 例

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.)....#1#g'

2

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#123#g'

246

反向引用的两组字符中可以插入内容

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#1,2#g'

2,4

 

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#1,2,3#g'

2,4,6

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#1:2:3#g'

2:4:6

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#1+2+3#g'

2+4+6

反向引用出来的字符后也可以插入内容

[root@oldboy-muban oldboy]# echo "123456"|sed -r 's#.(.).(.).(.)#1,2#g'

2,2

 

2.2.8 sed -r  反向引用调换passwd 首列和尾列

[root@oldboy-muban oldboy]# head -1 passwd

root:x:0:0:root:/root:/bin/bash

[root@oldboy-muban oldboy]# sed -r 's#(^root)(:.*:)(/b.*sh$)#321#g' passwd |head -1

/bin/bash:x:0:0:root:/root:root

[root@oldboy-muban oldboy]# sed -r 's#(root)(:x.*:)(/b.*sh$)#321#g' passwd |head -1

/bin/bash:x:0:0:root:/root:root

2.2.9 删除文件每行的第二个字符

[root@oldboy-muban ~]# sed -r 's#.##2' /etc/passwd |head -5

rot:x:0:0:root:/root:/bin/bash

bn:x:1:1:bin:/bin:/sbin/nologin

demon:x:2:2:daemon:/sbin:/sbin/nologin

am:x:3:4:adm:/var/adm:/sbin/nologin

l:x:4:7:lp:/var/spool/lpd:/sbin/nologin

2.2.10  删除文件每行的倒数第二个字符

[root@oldboy-muban ~]# sed -r 's#.(.)$##g' /etc/passwd |head -5

root:x:0:0:root:/root:/bin/ba

bin:x:1:1:bin:/bin:/sbin/nolog

daemon:x:2:2:daemon:/sbin:/sbin/nolog

adm:x:3:4:adm:/var/adm:/sbin/nolog

lp:x:4:7:lp:/var/spool/lpd:/sbin/nolog

2.2.11 删除文件每行的第二个单词

[root@oldboy-muban ~]# sed -r 's#[a-z]+##2' /etc/passwd |head -5

root::0:0:root:/root:/bin/bash

bin::1:1:bin:/bin:/sbin/nologin

daemon::2:2:daemon:/sbin:/sbin/nologin

adm::3:4:adm:/var/adm:/sbin/nologin

lp::4:7:lp:/var/spool/lpd:/sbin/nologin

[root@oldboy-muban ~]#

2.2.12 删除倒数第二单词

方法一

[root@oldboy-muban ~]# sed -r 's#[a-z]+/([a-z]+$)#/1#g' /etc/passwd |head -1

root:x:0:0:root:/root://bash

方法二

[root@oldboy-muban ~]# sed -r 's#[a-z]+##5' /etc/passwd |head -1

root:x:0:0:root:/root://bash

2.2.13 交换每行的第一个字符和第二个字符

[root@oldboy-muban ~]# sed -r 's#(^.)(.)#21#g'  /etc/passwd |head -1

orot:x:0:0:root:/root:/bin/bash

2.2.14 交换每行的第一个字符和第二个单词。

2.2.15 删除每行开头的所有空格

sed -r 's#[ ]+##g' /etc/passwd

2.2.16 用制表符替换文件中出现的所有空格

sed -r 's#[ ]+# #g' /etc/passwd

2.2.17 把所有大写字母用括号()括起来

sed -r 's#([ A-Z])#(1)#g' /etc/passwd

2.2.18 &符号表示被替换的内容

[root@oldboy-muban ~]# sed -r 's#(.*),(.*),(.*)#&.................1 2 3#g' person.txt

101,oldboy,CEO.................101 oldboy CEO

102,zhangyao,CTO.................102 zhangyao CTO

103,Alex,COO.................103 Alex COO

104,yy,CFO.................104 yy CFO

105,feixue,CIO.................105 feixue CIO

[root@oldboy-muban ~]# sed -r 's#(.*),(.*),(.*)#&.................1 2 3#' person.txt

101,oldboy,CEO.................101 oldboy CEO

102,zhangyao,CTO.................102 zhangyao CTO

103,Alex,COO.................103 Alex COO

104,yy,CFO.................104 yy CFO

105,feixue,CIO.................105 feixue CIO

2.2.19 例  rename  ""  ""  file*

[root@oldboy-muban test]# ls |xargs -n1

stu_102999_1_finished.jpg

stu_102999_2_finished.jpg

stu_102999_3_finished.jpg

stu_102999_4_finished.jpg

stu_102999_5_finished.jpg

[root@oldboy-muban test]# ls |xargs -n1 |sed -r 's#(.*)_(.*)_(.*)_(.*)#mv &  1_2_3.jpg  #g' |bash

[root@oldboy-muban test]# ls

stu_102999_1.jpg  stu_102999_2.jpg  stu_102999_3.jpg  stu_102999_4.jpg  stu_102999_5.jpg

[root@oldboy-muban test]# ls -l

total 0

-rw-r--r-- 1 root root 0 Feb 22 15:22 stu_102999_1.jpg

-rw-r--r-- 1 root root 0 Feb 22 15:22 stu_102999_2.jpg

-rw-r--r-- 1 root root 0 Feb 22 15:22 stu_102999_3.jpg

-rw-r--r-- 1 root root 0 Feb 22 15:22 stu_102999_4.jpg

-rw-r--r-- 1 root root 0 Feb 22 15:22 stu_102999_5.jpg

2.2.20 按正则输出行

[root@oldboy-muban ~]#  sed -rn '/oldboy|Alex/p' person.txt

101,oldboy,CEO        

103,Alex,COO

[root@oldboy-muban ~]#

2.2.21 例:sed -r 's#(.*),(.*),(.*)

题:如下取出  第一行 和 uid后面的数字

[root@fifi tmp]# cat  /tmp/test.txt

//xcbb_web/mobileLive/searchRecentUserLiveResult channel=App%20Store&clientType=1&packageName=com.prsoft.vncShow&page=1&pageSize=50&province=%E7%83%AD%E9%97%A8&sex=2&token=TWpBd05UZ3lNVFRDcDNScmQyeHlNM3BtYTNVeE5UQTFNVFF4TURnNU5ESTR3cWN4TlRFeE16WTRNalEzTURBMw%3D%3D&type=3&uid=20058214&version=1.1.1 "-"

//xcbb_web/business/mobile/api/getActiviWeekStarTask uid=20016107&token=TWpBd01UWXhNRGZDcHpOMmVEQjZhakYwZW5JeE5EazRPRGN3TURVME9Ua3d3cWN4TlRFeE56a3pPVEU0TURNdw==

方法:

[root@fifi tmp]# sed -r 's#(^//.*)/.*uid=(.*).&(.*$)#1,2#g'  /tmp/test.txt |awk -F "[ / ,]+" '{print $2,$NF }'

xcbb_web 2005821

xcbb_web 2001610

2.2.22 sed -nr '/ /,/ /p'

sed -n '/2018-06-21 09:10:43/,/2018-06-21 09:50:/p' catalina.out  > /tmp/1.txt

 

第3章 三剑客之三 grep

命令解释:grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

3.1 参数字符统计表


3.2 参数字符举例

3.2.1 -v例

grep -v "oldboy" test.txt

root@oldboy34 ~]# cat text.txt

test

liyao

oldboy

[root@oldboy34 ~]# grep -v "oldboy" text.txt

test

liyao

3.2.2 -A 、-B、-C 例

-A 10 after 显示你要找的行,及他后面的10

-B 10 before 显示你要找的行,及他前面的10

-C 10 context 找到你要找的行,及他前面的10和后面的10

[root@oldboy-muban ~]# grep -A 5 10 oldgil.txt

10

11

12

13

14

15

3.2.3 配合 cat-n

来使用 表示插入行号

[root@oldboy-muban ~]# cat -n oldboy.txt| grep -A 2 7

7 jfdslj

8 jsdl

3.2.4 -i 例

grep -i 不区分大小写

oldpwd = cd -

root@oldboy-muban oldboy]# pwd
/oldboy
[root@oldboy-muban oldboy]# cd -
/tmp
[root@oldboy-muban tmp]# env |grep -i "oldpwd"
OLDPWD=/oldbo

3.2.5 -n "." 例

grep -n 过滤后标注行号

[root@oldboy-muban ~]# grep -n "stu" nginx.conf
1:stu1
2:stu2

[root@oldboy-muban ~]# grep -n "." nginx.conf (.表示当前列中的任意字符)

1:stu1

2:stu2

3.2.6 egrep = grep -E 例 (取多行)

[root@oldboy-muban oldboy]# cat oldboy.txt

I am oldboy,myqq is 31333741

[root@oldboy-muban ~]# awk -F "[ ,]" '{print $3,$6}' /oldboy/oldboy.txt|grep -E "oldboy|31333741 "

oldboy 31333741

3.2.7 grep -o 和egrep -o 例

[root@oldboy-muban logs]# cat ett.txt

stu1 stu2

stu3 stu4

stu5 stu6

[root@oldboy-muban logs]# grep -o "stu4" ett.txt

stu4

[root@oldboy-muban logs]# egrep -o "stu4|stu5" ett.txt

stu4

stu5

第4章 通配符

4.1 通配符统计表格


4.2.1
* 例4.2 通配符举例

stu* *.log 以什么开头或以什么结尾的全部文件

[root@oldboy-muban logs]# ls oldboy*

oldboy01.txt oldboy03.txt oldboy05.txt oldboy07.txt oldboy09.txt

oldboy02.txt oldboy04.txt oldboy06.txt oldboy08.txt

[root@oldboy-muban logs]# ls *.txt

ett.txt oldboy02.txt oldboy04.txt oldboy06.txt oldboy08.txt

oldboy01.txt oldboy03.txt oldboy05.txt oldboy07.txt oldboy09.txt

4.2.2 ?? 例

?? ??? 任何一个文本/字符

ls ?

[root@oldboy-muban logs]# ls

1 2 4 ett.txt.bak oldboy02.txt oldboy04.txt oldboy06.txt

1.2 3 ett.txt oldboy01.txt oldboy03.txt

[root@oldboy-muban logs]# ls ?

1 2 3 4

4.2.3 [abcd] 例

[abcd] 表示一个整体里面有四种情况 [] 表示一个整体 要找 a或b或 c或 d

*[abcd]

*[abcd]*

*[abcd]*

[root@oldboy-muban logs]# ls *[1-4]*

oldboy01.txt oldboy02.txt oldboy03.txt oldboy04.txt

stu1:

stu2:

stu3:

stu4:

4.2.4 {…} 例

echo {0..10} {a..z} {z..a} 生成序列一连串的文本

oldboy{01..10} 生成一连串的文件或目录

c{a,b} c{,b} {a,b,c}{1,2,3} 生成的分别匹配的序列

seq 20 120 > ett.txt (生成20-120) seq 1 2 10 |xargs ( 生成奇数)

c{,b}

[root@oldboy-muban logs]# ls

ett.txt stu1 stu2 stu3 stu4 stu5

[root@oldboy-muban logs]# cp ett.txt{,.bak}

[root@oldboy-muban logs]# ls

ett.txt ett.txt.bak stu1 stu2 stu3 stu4 stu5

{1..5}{a..d}

[root@oldboy-muban logs]# touch stu{1..5}{a..d}

[root@oldboy-muban logs]# ls

1.2 ett.txt.bak stu1b stu1d stu2b stu2d stu3b stu3d stu4b stu4d stu5b stu5d

ett.txt stu1a stu1c stu2a stu2c stu3a stu3c stu4a stu4c stu5a stu5c

4.2.5 [!abc] 或[^abc] 例

oldboy[^4-8].txt

[root@oldboy-muban logs]# ls -l oldboy0[^4-8].txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy01.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy02.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy03.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy09.txt

oldboy[^678].txt

[root@oldboy-muban logs]# ls -l oldboy0[^678].txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy01.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy02.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy03.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy04.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy05.txt

-rw-r--r--. 1 root root 0 Jan 10 16:36 oldboy09.txt

4.2.6 注意问题

{无空格要,号}

[root@oldboy-muban logs]# echo {1..5}{ a..f}

1{ 2{ 3{ 4{ 5{ a..f}

{里面不能接路径}

[root@oldboy-muban logs]# cp ett.txt{,/tmp/.bak}

cp: accessing `ett.txt/tmp/.bak': Not a directory

第5章 特殊符号

5.1 特殊符号统计表

第6章 三剑客的正则表达式

6.1 正则表达式的定义

广义:

1、正则表达式就是为了处理大量的文本|字符串而定义的一套规则和方法。

2、通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串,Linux正则表达式一般以行为单位处理。

简单理解:

1、为处理大量文本|字符串而定义的一套规则和方法

2、以行为单位出来

正则表达式是一种描述一组字符串的模式,;类似于数学表达式,通过各种操作符 组成更小的表达式。

6.2 正则表达式的运用区分通配符

运用:大龄过滤日志工作,化繁为易 更简单,高效,易用。

区分:三剑客都支持,而且运用非常广泛(php per python 都支持)

ls* 支持通配符

正则表达式用来找 文件内容,文本 字符串

通配符用来找文件名或文件普通命令都支持

6.3 正则表达式的注意事项

1、正则表达式是 以行为单位处理字符串

2、颜色别名 一般配合grep egrep 来学习

例:配置别名

[root@oldboy-muban ~]# alias

alias cp='cp -i'

alias egrep='egrep --color=auto'

alias grep='grep --color=auto'

alias l.='ls -d .* --color=auto'

alias ll='ls -l --color=auto'

alias ls='ls --color=auto'

alias mv='mv -i'

alias rm='rm -i'

alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

3、注意字符集

6.4 正则表达式的分类

基本正则表达式(BRE —— basic regular expression)

高级功能扩展正则表达式(ERE —— extended regular expression

③BRE和ERE 的区别仅仅是元字符的不同

BRE支持的元字符有(^ $ . [ ] * )其他字符识别为普通字符:()

E RE添加了() { } ? + | 等

只有在用反斜杠“”进行转义的情况下,字符( ){ } 才会在BRE被当做元字符处理

在ERE中,任何元符号前面加上反斜杠反而会使其被当做普通字符来处理

6.5 三剑客正则表达式字符统计表

原文地址:https://www.cnblogs.com/wang-xd/p/6399616.html