三剑客特殊字符及参数归档 |
作者:oldboy_晓冬 归档:学习笔记 2017/1/12 |
命令解释:awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
三剑客之awk 参数统计表 | |||
一般格式 | awk ‘/ /‘ /文件 擅长取列 | ||
参数、字符 | 用途 | 使用方法 | 备注 |
NR | 表示行号 | ‘ NR>=5&&NR<=10‘ | &&并且同时 |
! | 表示取反 | ‘!/ / ‘ | |
$ 正则 | 以什么结尾(字符或文字) | ‘/\/$/‘ | ?\通配符,转义作用,取出以“/”结尾的列 |
表示列 $n | ‘$2>1‘ | 第2列数值>1 | |
{print $} | 显示 多列 | ‘{print $1,$2,$3,$4}‘ | $0整列 $1第一列 $NF尾列 |
显示多列中插入内容 | ‘{print $3"1234"$6}‘ | 在$3和$6中插入"1234"加上双引号 | |
.(点) | 任意一个文本或字符 | ||
-F "" | 赋予分割的一把刀 | -F " " ‘{print $3}‘ | 空格为分割点显示第3列 |
-F "[]" | 赋予分割的两把刀 | -F "[ ,] " ‘{print $3,$5}‘ | 以空和逗号为分割符显示第3列和第5列 |
^ 正则 | 以什么开头(文字或字符) | ‘/^d/‘ | 取出以d开头的列 |
NR $n 组合 | 取第n列并显示行号 | ‘{print NR,$2 }‘ | 输出打印的列第二列并显示行号(列的顺序可以改变) |
题意:取出ett.txt 中第25行到第30行
[root@oldboy34 data]# awk ‘NR>=25&&NR<=30‘ ett.txt
25
26
27
28
29
30
awk ‘!/oldboy/‘ test.txt
test
liyao
表示取出第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
取全部
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
常用格式 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
-F "[空格 ,]" 指定多把菜刀 分别以 空格和 ,号当分割符号
[root@oldboy-muban ~]# awk -F "[ ,]" ‘{print $3,$6}‘ /oldboy/oldboy.txt
oldboy 31333741
显示列中插入 12345 但是显示内容要加 ‘‘ "
[root@oldboy-muban oldboy]# awk -F "[ ,]" ‘{print $3" 12345 "$6}‘ oldboy.txt
oldboy 12345 31333741
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
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
命令解释:sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
sed 命令 — 选项 、命令、替换、标记 擅长取列行
三剑客之sed 参数统计表 | |||
一般格式 |
sed ‘/ /‘ /文件 擅长取行 | ||
参数、字符 |
用途 |
使用方法 |
备注 |
-n p |
打印发生替换的行 |
-n ‘ 20,30p‘ |
n表示行 p显示 显示20行到30行 |
‘s###g‘ |
替换 |
‘s#oldboy#bingbing#g‘ |
oldboy替换成bing~ |
替换并修改 |
-i ‘s###g |
只能接文件 | |
替换修改并备份 |
-i.bf ‘s###g |
备份很重要profile | |
反向引用 |
sed -r ‘s#.(.).(.).(.)#\1\2\3#g‘ |
-r 支持高级正则 | |
该命令一起使用表示只打印那些发生替换的行(取消默认输出)
格式: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
[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
[root@oldboy-muban oldboy]# echo "123456"|sed -r ‘s#.(.)....#\1#g‘
2
[root@oldboy-muban oldboy]# echo "123456"|sed -r ‘s#.(.).(.).(.)#\1\2\3#g‘
246
反向引用的两组字符中可以插入内容 |
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
反向引用出来的字符后也可以插入内容 |
2,2
[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$)#\3\2\1#g‘ passwd |head -1
/bin/bash:x:0:0:root:/root:root
[root@oldboy-muban oldboy]# sed -r ‘s#(root)(:x.*:)(/b.*sh$)#\3\2\1#g‘ passwd |head -1
/bin/bash:x:0:0:root:/root:root
命令解释:grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
grep 命令 — 排除、过滤 、筛选、 擅长取反
三剑客之grep 参数统计表 | |||
一般格式 |
grep ‘/ /‘d /文件 擅长取反 | ||
参数、字符 |
用途 |
使用方法 |
备注 |
-v |
排除所含一行 |
-v "oldboy" |
双引号表示整体 |
-A |
默认取后10行 |
-A 5 10 |
取第10行的后5行 |
-B |
默认取前10行 |
-B 5 10 |
取第10行的前5行 |
-C |
默认取中间10行 |
-C 5 10 |
取第10行的上下5行 |
-i |
不区分大小写 |
env |grep -i "oldpwd" |
OLDPWD=上级路径=cd- |
-n |
过滤出来的行添加行号 |
-n " ." |
过滤任意字符并添加行号 |
egrep=grep -E |
支持高级正则 |
-E "oldboy|31333741 " |
|表示或 取出oldboy或31~41取出的是行 |
-o |
取匹配出来的字符 |
-0 "oldboy" |
显示所取规则和内容 |
grep -v "oldboy" test.txt
root@oldboy34 ~]# cat text.txt
test
liyao
oldboy
[root@oldboy34 ~]# grep -v "oldboy" text.txt
test
liyao
-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
来使用 表示插入行号
[root@oldboy-muban ~]# cat -n oldboy.txt| grep -A 2 7
7 jfdslj
8 jsdl
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
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
[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
[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
通配符 文件名 | ||
①通配符使用环境强调: 匹配 / 查找文件名。 ②shell 的内置功能,Linux中的命令基本都支持。 ③一般指包含这些字符的字符串 如:? * [ ] {} | ||
符号 |
作用 |
实例 |
* |
匹配任何字符串/文本包括空字符串 *代表任意字符(0个或多个) |
ls file* ls *.txt 区分正则 |
? |
匹配任何一个字符(不在括号内时) ?代表任意一个字符 |
ls file? |
字符集合(一堆字符或文本) | ||
[abcd] |
[abcd] 表示一个整体里面有四种情况 [] 表示一个整体 要找 a或b或 c或 d |
ls file[12345]* *[abcd] *[abcd]* |
[a-z] |
表示范围a到z - 表示范围的意思 []表示匹配中括号中任意字符 (只能用来找人,找文件) |
ls file0[678] ls file0[0-9] |
{…} |
表示生成序列(字母或数字),中间以逗号分隔,且不能有空格 (可以找人、造人、生成序列) |
echo {0..10} {a..z} {z..a} ls /echo/mkdir/rm/touch oldboy{01..10} c{a,b} c{,bak} {a,b,c}{1,2,3} |
补充 | ||
[!abcd] |
或[^abcd]表示非,表示不匹配括号里面的任何一个字符 |
ls file[^4-8].txt ls file[!567].log |
*[abc]* |
取中间为a或b或c 开头结尾任意的文件 |
ls *[1-4]* ls *[678]* |
c{,b} |
同时生成c 和cb |
cp file{,.bak} |
#################################有底线的############################################ |
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
?? ??? 任何一个文本/字符
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
[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:
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
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
{无空格要,号}
[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
特殊符号 | ||
符号 |
解释 |
作用 |
第一部分 管道 | ||
命令 | 命令 |
管道符号,传递普通文本,字符串来自上一个命令 |
|
|xargs |
管道与xargs结合将传输的文本、字符串变成文件名 |
|
第二部分 目录结构 | ||
. |
当前目录 任意字符(正则) |
|
.. |
当前目录的上一级目录 |
|
. .. 均为两个隐藏目录 | ||
第三部分 重定向符号 | ||
> |
输出重定向 清空后追加内容 |
|
>> |
追加输出重定向 追加到文件最后一行 |
|
< |
输入重定向 |
tr <file xargs < file |
<< |
追加输入重定向 |
cat >>file<<EOF (cat用来追加多行,粘贴) |
第三部分 未分类特殊符号 | ||
# |
linux中的注释 root(超级用户)中的命令提示符 |
|
$ |
在普通用户中表示命令提示符 |
|
shell中默认取/引用环境变量(PATH)里的内容 |
echo $PATH | |
awk中 $n 表示取列 |
||
` ` |
反引号引用命令的结果和$()用法一致 |
ls `wich cp` |
; |
分隔多个命令,没有逻辑关系,只是一步一步执行 |
sed -n ‘20p;30p;50p‘ pwd;pwd;pwd;hostname; |
- |
cd- 表示返回上一次工作目录、返回上一次的位置 |
|
su - 切换用户,重新加载环境变量 |
||
~ |
当前家目录 老家 |
|
/ |
根或路径分隔符 |
|
\ |
转义符号(撬棍)屏蔽别名 |
|
! |
表示强制 |
q! |
表示非 |
find /awk ! | |
历史命令 |
!1021 | |
&& |
表示并且 前面一个条件成立再执行后面一个 |
|
第四部分 引号 | ||
" " |
解释特殊符号 特殊符号有了原本的意思 |
|
‘ ‘ |
所见即所得 吃啥吐啥 |
|
不加引号 : 比较暧昧 支持通配符 |
广义:
1、正则表达式就是为了处理大量的文本|字符串而定义的一套规则和方法。
2、通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串,Linux正则表达式一般以行为单位处理。
简单理解:
1、为处理大量文本|字符串而定义的一套规则和方法
2、以行为单位出来
正则表达式是一种描述一组字符串的模式,;类似于数学表达式,通过各种操作符 组成更小的表达式。
运用:大龄过滤日志工作,化繁为易 更简单,高效,易用。
区分:三剑客都支持,而且运用非常广泛(php per python 都支持)
ls* 支持通配符
正则表达式用来找 文件内容,文本 字符串
通配符用来找文件名或文件普通命令都支持
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、注意字符集
①基本正则表达式(BRE —— basic regular expression)
②高级功能扩展正则表达式(ERE —— extended regular expression)
③BRE和ERE 的区别仅仅是元字符的不同
BRE支持的元字符有(^ $ . [ ] * )其他字符识别为普通字符:\(\)
E RE添加了() { } ? + | 等
只有在用反斜杠“\”进行转义的情况下,字符( ){ } 才会在BRE被当做元字符处理
在ERE中,任何元符号前面加上反斜杠反而会使其被当做普通字符来处理
正则表达式元字符统计表 | ||
第一部分基础正则元字符 ^ $ * .* [^abc] | ||
^ |
表示搜索以^word 开头的行 | |
|
[root@oldboy-muban ~]# grep "^m" oldboy.txt | |
$ |
表示搜索以word$ 结尾的行, | |
|
[root@oldboy-muban ~]# grep "m$" oldboy.txt [root@oldboy-muban ~]# grep "\!$" oldboy.txt | |
^$ |
表示空行 不是空格 | |
|
[root@oldboy-muban ~]# grep -n "^$" oldboy.txt 3: 8: | |
. |
表示且只能表示任意字符(不匹配空行) | |
其他含义 加载文件 当前目录
|
[root@oldboy-muban ~]# grep "." 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@oldboy-muban ~]# egrep "o....y" oldboy.txt I am oldboy teacher! my blog is http://oldboy.blog.51cto.com my god ,i am not oldbey,but OLDBOY! | |
\ |
转义字符,让有特殊含义的字符脱掉马甲现出原形 | |
或:穿上马甲当皇帝
|
[root@oldboy-muban ~]# grep "\.$" oldboy.txt I teach linux. my qq num is 49000448. not 4900000448. \n \t \b \r | |
* |
重复、连续一个文本、字符0次或多次 0 +空行 | |
连续0次表示空,匹配所有内容 "0\.* " 找到所有的0 正则表达式表示连续的时候尽可能的多吃匹配的更多 |
[root@oldboy-muban ~]# grep "0\.*" oldboy.txt [root@oldboy-muban ~]# grep "0*" oldboy.txt [root@oldboy-muban ~]# grep "90*" oldboy.txt
| |
^.* |
以任意多个字符串开头 | |
*尽可能的多吃具有贪婪性 ^m.*m$ |
[root@oldboy-muban ~]# grep "^.*o" oldboy.txt 以m开头中间任意并以m结尾的行 [root@oldboy-muban ~]# grep "^m.*m$" oldboy.txt | |
正则中的括号表达式 | ||
[abc] [0-9] [ \ , . / ] |
匹配子符集合(一个筐里有很多条件)内的任意一个字符a或b或c [a-z]匹配所有的小写字母 | |
|
[root@oldboy-muban ~]# grep [abc] oldboy.txt [root@oldboy-muban ~]# grep "[a-z0-9A-Z]" oldboy.txt | |
拓展 |
^[mon] 匹配以m或n或o 开头的行 | |
|
[root@oldboy-muban ~]# grep "^[mon]" oldboy.txt | |
拓展 |
[mg]$ 匹配以m或g开头的行 | |
|
[root@oldboy-muban ~]# grep "[mg]$" oldboy.txt | |
拓展 |
^[mo].*[mg]$ 以m或n开头并且以m或g结尾的行 | |
|
[root@oldboy-muban ~]# grep "^[mo].*[mg]$" oldboy.txt my blog is http://oldboy.blog.51cto.com our site is http://www.etiantian.org | |
[^a-r] |
匹配不包含^后的任意字符 | |
|
[root@oldboy-muban ~]# grep "[^a-r]" oldboy.txt | |
^[^mn] |
表示匹配不是以m或n开头的行(不显示空行) | |
[^mn]匹配不包含m或n 的任意字符
|
[root@oldboy-muban ~]# grep "^[^mn]" oldboy.txt | |
区分grep -v |
-v [^mn] 表示匹配不包含m或n以外字母的行(显示空行) | |
匹配不含mn以外的字母的行 匹配开头不含mn的行
|
[root@oldboy-muban ~]# grep -nv "[^mn]" oldboy.txt [root@oldboy-muban ~]# grep -nv "^[mn]" oldboy.txt | |
第二部分 扩展正则ERE grep -E=egrep + | ? () {} \.$ | ||
{ } |
0{1,3}匹配出现最少1次0,最多3次0的行 | |
查找内容 查找过程
|
[root@oldboy-muban ~]# grep -E "0{1,3}" oldboy.txt [root@oldboy-muban ~]# grep -Eo "0{1,3}" oldboy.txt 000 000 00 | |
grep 结合 \ 转义符号支持高级正则
"0\{,3\}"
"0\{3\}"
"0\{3,\}" |
[root@oldboy-muban ~]# grep -o "0\{,3\}" oldboy.txt 匹配最多3次 | |
+ |
最少匹配出连续加号前面的字符1次或多次 1+ | |
|
[root@oldboy-muban ~]# egrep "0+" oldboy.txt | |
拓展 |
如何找出文本中小写字母单词 : egrp -o "[z-a]+" | |
第一步: [z-a] 第二步 [z-a]+ 第三步 -o |
[root@oldboy-muban ~]# egrep -o "[a-z]+" oldboy.txt |xargs am oldboy teacher teach linux like badminton ball billiard ball and chinese chess my blog is http oldboy blog cto com our site is http www etiantian org my qq num is not my god i am not oldbey but | |
? |
重复前面字符0次或1次 ( . 是有且只有一个) 0 空行 +1 | |
|
root@oldboy-muban ~]# egrep "0?" oldboy.txt | |
| |
表示或者,同时过滤多个字符 | |
|
[root@oldboy-muban ~]# egrep "3306|1521" /etc/services | |
() |
分组过滤被扩起来的东西表示一个整体,(一个字符)后项引用 | |
|
dumpe2fs 1.41.12 (17-May-2010) Inode count: 462384 Block count: 1849088 Block size: 4096 Inode size: 256 [root@oldboy-muban ~]# egrep "g(la|oo)d" a.txt good good glad | |
第三部分正则预定义 | ||
[:alnum:] |
[z-aA-Z0-9]匹配任意一个字母或数字字符 [[:alnum:]]+ | |
[:alpha:] |
匹配任意一个字母字符 (包括大小写) [[:alpha:]]{4} | |
[:blank:] |
空格与制表符 (横向和纵向) [[:blank:]]* | |
[:digit:] |
匹配任意一个数字字符 [[:digit:]]? | |
[:lower:] |
匹配小写字母 [[:lower:]]{5,} | |
[:upper:] |
匹配大写字母 ([[:upper:]]+)? | |
[:punct:] |
匹配标点符号 [[:punct:]] | |
[:space:] |
匹配一个包括换行符、回车等在内的所有空白符 [[:space:]]+ | |
[:graph:] |
匹配任何一个可以看得键的且可以打印的字符 [[:graph:]] | |
[:xdigit:] |
任何一个十六进制数 (0-9,a-f, A-F) [[:xdigit:]]+ | |
[:cntrl:] |
任何一个控制字符(ASCLL字符集中的前32个字符) [[:cntrl:]] | |
[:print:] |
任何一个可以打印的字符 [[:print:]] | |
|
| |
\b |
\bcool\b匹配cool,不匹配coolant 单词边界 | |
\n |
\n 匹配一个新行 换行符 | |
\s ? |
x\s匹配xx, 不匹配xx ????????????????? 单个空白字符 | |
\t |
\t匹配一个横向制表符 横向制表符 | |
\f |
换页符 | |
\r |
\r匹配回车 回车 | |
原文:http://www.cnblogs.com/wang-xd/p/6399616.html