Linux基础 正则表达式
2018-03-27 17:37
211 查看
正则表达式
注意语系对正则表达式的影响 export LANG=
C :0123...ABCD....Zabcd...z
zh_CN:0123...aAbBcCdDeEfF...zZ
引用的时候得加一个[] 例:[[:alnum:]]
[:alnum:] 0-9 A-Z a-z
[:alpha:] A-Z a-z
[:digit:] 0-9
[:lower:] a-z
[:upper:] A-Z
[:xdigit:] 十六进制 0-9 A-F a-f
[:blank:] 空格和Tab
[:graph:] 除了空格和Tab
[:space:] 任何会产生空格的字符 包括空格 tab CR
[:cntrl:] 代表键盘上面的控制按键,包括CR LF TAB DEL
[:print:] 任何可以被打印除出来的字符
[:punct:] 标点符号 ' " ? ! : ; # $
grep -n -v -A(num) -B(num) --color=auto ''file
-n显示行数 -A(after 默认10行) -B(before 默认10行)-v反向选择 --color标出匹配字符
dmesg 列出内核信息
alias grep='grep --color=auto' 可以写在~/.bashrc中 开机自动运行
source 执行
wget url 下载
[] 只表示一个字符,例如[123] 匹配1或2或3 ,匹配字符串"123"
[^] 反向选择 例 '[^g]oo' 匹配前面不是g的oo字符串
#[0-9]=[0123456789]=[:digit:] 注意语系LANG
^ 行首 "^[0-9]" 任意数字开头字符串 ='^[[:digit:]]'
$ 行尾 "[0-9]$" 任意数字结尾字符串
#'^$'匹配空白行 注意断行符linux($)和windows(^M$) cat -A filename可以查看
\ 转义有特殊含义的字符
. 有一个任意字符的意思
* 重复前一个字符0-∞次 o* 匹配0-∞个o字符串 , oo* 至少一个o, ooo* 至少两个o
#.与*经常组合 .*表示任意字符串
{} 限定连续字符范围(shell中有特殊含义,需要转义字符\{ \})
# 'ooo'='o\{3\}', 匹配2-5个o组成的字符串 'o\{2,5\}' ,匹配2个以上的o 'o\{2,\}'='ooo*']
扩展正则表达式(egrep=grep -E)
+ 重复一个或一个以上的前一个RE字符,egrep -n 'go+d' filename = grep -n 'goo*d' filename
? 零个或一个的前一个 RE字符 'go?d' 查找gd or god goo?d=gro\{1,2\}d
| 或(or) egrep -n 'god|good' filename 查找 god or good
() 找出“组”字符串 egrep -n 'g(al|oo)d' filename 查找gald or good ,所以 g(oo|o)d=goo?d=
()+ 多个重复组的判别 字符串AxzyxzyxzyxzyD匹配方式grep 'A(xzy)+D'
#sed工具
-n 使用安静模式(silent)。一般sed用法,所来来自STDIN的信息显示在屏幕上。加上-n后只显示经过处理的行
-e 选项允许在同一行里执行多条命令: sed -e '1,5d' -e 's/test/check/' file
-f 直接将sed动作写在一个文件内,-f filename执行文件内容
-r sed支持扩展正则表达式,默认基础正则表达式
-i 修改文件内容
[x[,y]] function 动作,x y表示行数
function参数
a 新增 sed '2a oldboy'加在第二行下面
i 插入 sed '2i oldboy'加在第二行上面
#sed '2a oldboy \ \ 多行需要
oldgirl' filename 加两行
c 替换行 sed '2,5c oldboy' 替换2-5行替换成oldboy (4行变1行)
d 删除行 sed '2,5d'filename 删除2-5行 $表示最后一行
p 打印行 配合-n使用,只显示打印内容。不用-n,则原文件内容+打印内容
s 替换 正则表达式 's///'替换第一处 's///g'替换每一次 's///2g'第二处开始替换
#sed '/(组1)(组2)/\1 \2/' \1表示组1 \2表示组2
交换第一列和最后一列分隔符':' root:x:0:0:root:/root:/bin/bash
sed -r 's#([a-z]*)(:.*:)(/.*)#\3\2\1#g' filename
#printf 格式化输出(C)
\n 输出新的一行
\f 清屏输出
\a 警告声音输出
\t 水平tab
\v 垂直tab
\b 退格键
\r Enter
printf '%ns %ni %N.nf' N n表示数字长度 s(string)字符 i(integer)整形 f(floating)浮点
'\x45' ASCII值为45
#awk '条件类型1{动作1}条件2{动作2}' filename 默认的分隔符 空格或tab
awk '{print $n}' fliename $NF最后一行
FS目前的分隔符 NF拥有字段总数 NR现在处理的是第几行
例awk 'BEGIN {FS=":"} $3<10 {print $1 "\t" $3}'
-F '[/:]'多个分割符 -F ''无分割符
例题:
找出/etc/下文件类型为连接文件属性的文件。
用正则表达式匹配ifconfig中本机ip
stat filename提取权限数字
1:过滤出下面正确的手机号
13838389438
23838389438
13535351335
138389438
13122024369
535351335
18920119988
2:过滤出下面正确的邮箱
12121212@qq.com
23232323@.com
@qw23232.163.com
15523153099@139.com
admin@qstack.com.cn
www.qstack.com.cn
qw23232.163.com@qq
3:过滤出正确的出生日期
1900/12/12
2020/15/20
1010/11/60
1995/06/08
1994/01/21
1990/11/11
3990/09/10
4:格式转换
原始数据:
17/Apr/2015:09:29:24 +0800
17/Apr/2015:09:30:26 +0800
17/Apr/2015:09:31:56 +0800
18/Apr/2015:09:34:12 +0800
18/Apr/2015:09:35:23 +0800
19/Apr/2015:09:23:34 +0800
19/Apr/2015:09:22:21 +0800
20/Apr/2015:09:45:22 +0800
转换结果:
2015-04-17 09:29:24+0800
2015-04-17 09:30:26+0800
2015-04-17 09:31:56+0800
2015-04-18 09:34:12+0800
2015-04-18 09:35:23+0800
2015-04-19 09:23:34+0800
2015-04-19 09:22:21+0800
2015-04-20 09:45:22+0800
注意语系对正则表达式的影响 export LANG=
C :0123...ABCD....Zabcd...z
zh_CN:0123...aAbBcCdDeEfF...zZ
引用的时候得加一个[] 例:[[:alnum:]]
[:alnum:] 0-9 A-Z a-z
[:alpha:] A-Z a-z
[:digit:] 0-9
[:lower:] a-z
[:upper:] A-Z
[:xdigit:] 十六进制 0-9 A-F a-f
[:blank:] 空格和Tab
[:graph:] 除了空格和Tab
[:space:] 任何会产生空格的字符 包括空格 tab CR
[:cntrl:] 代表键盘上面的控制按键,包括CR LF TAB DEL
[:print:] 任何可以被打印除出来的字符
[:punct:] 标点符号 ' " ? ! : ; # $
grep -n -v -A(num) -B(num) --color=auto ''file
-n显示行数 -A(after 默认10行) -B(before 默认10行)-v反向选择 --color标出匹配字符
dmesg 列出内核信息
alias grep='grep --color=auto' 可以写在~/.bashrc中 开机自动运行
source 执行
wget url 下载
[] 只表示一个字符,例如[123] 匹配1或2或3 ,匹配字符串"123"
[^] 反向选择 例 '[^g]oo' 匹配前面不是g的oo字符串
#[0-9]=[0123456789]=[:digit:] 注意语系LANG
^ 行首 "^[0-9]" 任意数字开头字符串 ='^[[:digit:]]'
$ 行尾 "[0-9]$" 任意数字结尾字符串
#'^$'匹配空白行 注意断行符linux($)和windows(^M$) cat -A filename可以查看
\ 转义有特殊含义的字符
. 有一个任意字符的意思
* 重复前一个字符0-∞次 o* 匹配0-∞个o字符串 , oo* 至少一个o, ooo* 至少两个o
#.与*经常组合 .*表示任意字符串
{} 限定连续字符范围(shell中有特殊含义,需要转义字符\{ \})
# 'ooo'='o\{3\}', 匹配2-5个o组成的字符串 'o\{2,5\}' ,匹配2个以上的o 'o\{2,\}'='ooo*']
扩展正则表达式(egrep=grep -E)
+ 重复一个或一个以上的前一个RE字符,egrep -n 'go+d' filename = grep -n 'goo*d' filename
? 零个或一个的前一个 RE字符 'go?d' 查找gd or god goo?d=gro\{1,2\}d
| 或(or) egrep -n 'god|good' filename 查找 god or good
() 找出“组”字符串 egrep -n 'g(al|oo)d' filename 查找gald or good ,所以 g(oo|o)d=goo?d=
()+ 多个重复组的判别 字符串AxzyxzyxzyxzyD匹配方式grep 'A(xzy)+D'
#sed工具
-n 使用安静模式(silent)。一般sed用法,所来来自STDIN的信息显示在屏幕上。加上-n后只显示经过处理的行
-e 选项允许在同一行里执行多条命令: sed -e '1,5d' -e 's/test/check/' file
-f 直接将sed动作写在一个文件内,-f filename执行文件内容
-r sed支持扩展正则表达式,默认基础正则表达式
-i 修改文件内容
[x[,y]] function 动作,x y表示行数
function参数
a 新增 sed '2a oldboy'加在第二行下面
i 插入 sed '2i oldboy'加在第二行上面
#sed '2a oldboy \ \ 多行需要
oldgirl' filename 加两行
c 替换行 sed '2,5c oldboy' 替换2-5行替换成oldboy (4行变1行)
d 删除行 sed '2,5d'filename 删除2-5行 $表示最后一行
p 打印行 配合-n使用,只显示打印内容。不用-n,则原文件内容+打印内容
s 替换 正则表达式 's///'替换第一处 's///g'替换每一次 's///2g'第二处开始替换
#sed '/(组1)(组2)/\1 \2/' \1表示组1 \2表示组2
交换第一列和最后一列分隔符':' root:x:0:0:root:/root:/bin/bash
sed -r 's#([a-z]*)(:.*:)(/.*)#\3\2\1#g' filename
#printf 格式化输出(C)
\n 输出新的一行
\f 清屏输出
\a 警告声音输出
\t 水平tab
\v 垂直tab
\b 退格键
\r Enter
printf '%ns %ni %N.nf' N n表示数字长度 s(string)字符 i(integer)整形 f(floating)浮点
'\x45' ASCII值为45
#awk '条件类型1{动作1}条件2{动作2}' filename 默认的分隔符 空格或tab
awk '{print $n}' fliename $NF最后一行
FS目前的分隔符 NF拥有字段总数 NR现在处理的是第几行
例awk 'BEGIN {FS=":"} $3<10 {print $1 "\t" $3}'
-F '[/:]'多个分割符 -F ''无分割符
例题:
找出/etc/下文件类型为连接文件属性的文件。
用正则表达式匹配ifconfig中本机ip
stat filename提取权限数字
1:过滤出下面正确的手机号
13838389438
23838389438
13535351335
138389438
13122024369
535351335
18920119988
2:过滤出下面正确的邮箱
12121212@qq.com
23232323@.com
@qw23232.163.com
15523153099@139.com
admin@qstack.com.cn
www.qstack.com.cn
qw23232.163.com@qq
3:过滤出正确的出生日期
1900/12/12
2020/15/20
1010/11/60
1995/06/08
1994/01/21
1990/11/11
3990/09/10
4:格式转换
原始数据:
17/Apr/2015:09:29:24 +0800
17/Apr/2015:09:30:26 +0800
17/Apr/2015:09:31:56 +0800
18/Apr/2015:09:34:12 +0800
18/Apr/2015:09:35:23 +0800
19/Apr/2015:09:23:34 +0800
19/Apr/2015:09:22:21 +0800
20/Apr/2015:09:45:22 +0800
转换结果:
2015-04-17 09:29:24+0800
2015-04-17 09:30:26+0800
2015-04-17 09:31:56+0800
2015-04-18 09:34:12+0800
2015-04-18 09:35:23+0800
2015-04-19 09:23:34+0800
2015-04-19 09:22:21+0800
2015-04-20 09:45:22+0800
相关文章推荐
- 【Linux系列】【基础版】第四章 Shell基础之正则表达式
- 9、Linux正则表达式基础
- 开发环境入门 linux基础 (部分)正则表达式 grep sed
- Linux基础入门及系统管理01-Shell三剑客之egrep及扩展正则表达式15
- Linux学习笔记(8)----基础正则表达式
- Linux基础 用户管理 权限管理 正则表达式
- linux基础--grep以及模式正则表达式
- 详解linux正则表达式(基础正则表达式+扩展正则表达式)
- Linux学习日记--基础命令(6)--grep及正则表达式
- Linux基础(三)--grep的使用和基本正则表达式
- linux基础命令(二)文件寻址和正则表达式
- Linux基础之-正则表达式(grep,sed,awk)
- Linux基础10_正则表达式及扩展
- 2017-12-16Linux基础知识(17)egrep扩展正则表达式
- Linux基础(15)/正则表达式
- Spark修炼之道(基础篇)——Linux大数据开发基础:第十五节:基础正则表达式(一)
- Linux基础之正则表达式,用户、组管理命令介绍
- Linux中grep命令,用或的关系查询多个字符串,正则表达式基础说明
- Linux下Shell编程——正则表达式基础与扩展
- Linux基础入门(六) --学习笔记-正则表达式