[2010-12-25]正则表达式
时间:2010-12-25 来源:kellysir
正则表达式是用来处理字符串的,对字符串的处理,有查、换两种基本操作。
1、要注意语系
2、特殊符号 代表意义
[:alnum:] 代表英文大小写字符及数字,亦即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:blank:] 代表空格 [Tab] 按键两者
[:cntrl:] 代表键盘上面癿控制按键,包括 CR, LF, Tab, Del.. 等等
[:digit:] 代表数字而已, 0-9
[:graph:] 除了空格 [Tab] 按键) 外的其他所有按键
[:lower:] 代表小写字符, a-z
[:print:] 代表任何可以被打印出来的字符
[:punct:] 代表标点符号 (punctuation symbol),如:" ' ? ! ; : # $...
[:upper:] 代表大写字符, A-Z
[:space:] 任何会产生空白的字符,包括空格键, [Tab], CR 等等
[:xdigit:] 代表 16 进制数字类型,因此包括: 0-9, A-F, a-f 的数字与字符 3、grep
选项不参数:
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色显示喔!
范例一:将 last 当中,有出现 root 的那一行就查出来;
[root@www ~]# last | grep 'root'
范例二:与范例一相反,叧要没有 root 的就找出!
[root@www ~]# last | grep -v 'root'
范例三:在 last 的输出讯息中,叧要有 root 就找出,并且仅取第一栏
[root@www ~]# last | grep 'root' |cut -d ' ' -f1
# 在取出 root 后,使用用 cut 来处理,就能够仅取得第一栏啰!
范例四:查出 /etc/man.config 内含有 MANPATH 的那几行
[root@www ~]# grep --color=auto 'MANPATH' /etc/man.config
....(前面省略)....
MANPATH_MAP /usr/X11R6/bin /usr/X11R6/man
MANPATH_MAP /usr/bin/X11 /usr/X11R6/man
MANPATH_MAP /usr/bin/mh /usr/share/man
# 神奇的是,如果加上 --color=auto 的选项,找到的关键词部分会用特殊颜色显示喔!
选项不参数:
-A :后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
-B :后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来;
--color=auto 可将正确的那个撷取数据列出颜色
范例一:用 dmesg 列出核心讯息,再以 grep 找出内含 eth 那行
[root@www ~]# dmesg | grep 'eth'
eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
eth0: Identified 8139 chip type 'RTL-8139C'
eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
eth0: no IPv6 routers present
# dmesg 可列出核心产生的讯息!透过 grep 来撷取网络卡相关信息 (eth) ,
# 就可发现如上信息。不过没有行号与特殊颜色显示!看看下个范例吧!
范例二:承上题,要将捉到的关键词显色,且加上行号来表示:
[root@www ~]# dmesg | grep -n --color=auto 'eth'
247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
248:eth0: Identified 8139 chip type 'RTL-8139C'
294:eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
305:eth0: no IPv6 routers present
# 你会发现除了 eth 会有特殊颜色杢表示以外,最前面还有行号喔!
范例三:承上题,在关键词所在行的前两行与后三行也一起捉出来显示
[root@www ~]# dmesg | grep -n -A3 -B2 --color=auto 'eth'
245-PCI: setting IRQ 10 as level-triggered
246-ACPI: PCI Interrupt 0000:00:0e.0[A] -> Link [LNKB] ...
247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
248:eth0: Identified 8139 chip type 'RTL-8139C'
249-input: PC Speaker as /class/input/input2
250-ACPI: PCI Interrupt 0000:00:01.4[B] -> Link [LNKB] ...
251-hdb: ATAPI 48X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB
Cache, UDMA(66)
# 如上所示,你会发现关键词 247 所在的前两行及 248 后三行也都被显示出来!
# 这样可以让你将关键词前后数据捉出来进行分析啦!
选项不参数:
-n :使用 (silent)模式。在一般 sed 的用法中,所有来自 STDIN的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在指令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed动作;
-r :sed 的动作支持的是延伸型正则表示法的语法。(预设是基础正则表达式语法)
-i :直接修改读出的档案内容,而不是由屏幕输出。
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
function 有底下这些咚咚:
a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式语法 5、进阶 + 重复一次或一次以上,即至少重复一次 ? 重复0次或一次 | 表示二选其一,如 god|dog () 表示群组 ()+ 表示此组至少重复一次
[:alnum:] 代表英文大小写字符及数字,亦即 0-9, A-Z, a-z
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:blank:] 代表空格 [Tab] 按键两者
[:cntrl:] 代表键盘上面癿控制按键,包括 CR, LF, Tab, Del.. 等等
[:digit:] 代表数字而已, 0-9
[:graph:] 除了空格 [Tab] 按键) 外的其他所有按键
[:lower:] 代表小写字符, a-z
[:print:] 代表任何可以被打印出来的字符
[:punct:] 代表标点符号 (punctuation symbol),如:" ' ? ! ; : # $...
[:upper:] 代表大写字符, A-Z
[:space:] 任何会产生空白的字符,包括空格键, [Tab], CR 等等
[:xdigit:] 代表 16 进制数字类型,因此包括: 0-9, A-F, a-f 的数字与字符 3、grep
- 入门级
选项不参数:
-a :将 binary 档案以 text 档案的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色显示喔!
范例一:将 last 当中,有出现 root 的那一行就查出来;
[root@www ~]# last | grep 'root'
范例二:与范例一相反,叧要没有 root 的就找出!
[root@www ~]# last | grep -v 'root'
范例三:在 last 的输出讯息中,叧要有 root 就找出,并且仅取第一栏
[root@www ~]# last | grep 'root' |cut -d ' ' -f1
# 在取出 root 后,使用用 cut 来处理,就能够仅取得第一栏啰!
范例四:查出 /etc/man.config 内含有 MANPATH 的那几行
[root@www ~]# grep --color=auto 'MANPATH' /etc/man.config
....(前面省略)....
MANPATH_MAP /usr/X11R6/bin /usr/X11R6/man
MANPATH_MAP /usr/bin/X11 /usr/X11R6/man
MANPATH_MAP /usr/bin/mh /usr/share/man
# 神奇的是,如果加上 --color=auto 的选项,找到的关键词部分会用特殊颜色显示喔!
- 进阶级
选项不参数:
-A :后面可加数字,为 after 的意思,除了列出该行外,后续的 n 行也列出来;
-B :后面可加数字,为 befer 的意思,除了列出该行外,前面的 n 行也列出来;
--color=auto 可将正确的那个撷取数据列出颜色
范例一:用 dmesg 列出核心讯息,再以 grep 找出内含 eth 那行
[root@www ~]# dmesg | grep 'eth'
eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
eth0: Identified 8139 chip type 'RTL-8139C'
eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
eth0: no IPv6 routers present
# dmesg 可列出核心产生的讯息!透过 grep 来撷取网络卡相关信息 (eth) ,
# 就可发现如上信息。不过没有行号与特殊颜色显示!看看下个范例吧!
范例二:承上题,要将捉到的关键词显色,且加上行号来表示:
[root@www ~]# dmesg | grep -n --color=auto 'eth'
247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
248:eth0: Identified 8139 chip type 'RTL-8139C'
294:eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
305:eth0: no IPv6 routers present
# 你会发现除了 eth 会有特殊颜色杢表示以外,最前面还有行号喔!
范例三:承上题,在关键词所在行的前两行与后三行也一起捉出来显示
[root@www ~]# dmesg | grep -n -A3 -B2 --color=auto 'eth'
245-PCI: setting IRQ 10 as level-triggered
246-ACPI: PCI Interrupt 0000:00:0e.0[A] -> Link [LNKB] ...
247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
248:eth0: Identified 8139 chip type 'RTL-8139C'
249-input: PC Speaker as /class/input/input2
250-ACPI: PCI Interrupt 0000:00:01.4[B] -> Link [LNKB] ...
251-hdb: ATAPI 48X DVD-ROM DVD-R-RAM CD-R/RW drive, 2048kB
Cache, UDMA(66)
# 如上所示,你会发现关键词 247 所在的前两行及 248 后三行也都被显示出来!
# 这样可以让你将关键词前后数据捉出来进行分析啦!
- 要搜索指定的字符串,该字符串以单引号括起来
- 字符集合,用[]括起来,用^表示不包括其后的指定的字符
- 行首^、行尾$
- 任意一个字符 . (句点)
- 字符重复
选项不参数:
-n :使用 (silent)模式。在一般 sed 的用法中,所有来自 STDIN的数据一般都会被列出到屏幕上。但如果加上 -n 参数后,则只有经过 sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在指令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed动作;
-r :sed 的动作支持的是延伸型正则表示法的语法。(预设是基础正则表达式语法)
-i :直接修改读出的档案内容,而不是由屏幕输出。
动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』
function 有底下这些咚咚:
a :新增, a 的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)~
c :取代, c 的后面可以接字符串,这些字符串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运作~
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式语法 5、进阶 + 重复一次或一次以上,即至少重复一次 ? 重复0次或一次 | 表示二选其一,如 god|dog () 表示群组 ()+ 表示此组至少重复一次
相关阅读 更多 +