正则表达式

正则表达试:

grep egrep fgrep

grep:根据方式寻找文本,并将适合形式的文本行展现出来。

pattern:文本字符和正则表达式的元字符组合而成相配原则。

grep : 使用基本正则表明式定义的形式来过滤文本的授命。

       -i 不区分轻重缓急写

       –color 把相称到的

       -v 突显未有被形式相称到行。(相反)

       -o 只展现被方式相称到的串。

       -E 使用扩大正则表明式

       -A 相称到的及展现下文n行

       -B 相称到的及显示上文n行

       -C 相称到的及显示上、下文n行 #grep -C n ‘abc.*’ /proc/cpuinto

正则表明式

  • 关任宝茹则表达式相信广大学电脑的人都听大人讲过
  • 更进一步是做编制程序行业的人

正则表达式

在Linux其中,大家平时使用文本处理工科具完结无数意义,比如文本过滤工具grep等等,而那时屡次须求正则表明式的提携。
  正则表达式:由一类特殊字符及文本字符所编写的格局,在那之中多少字符(元字符)不代表字符字面意义,而表示控制或通配的功效。
  
  正则表明式分类:基本正则表明式、扩展正则表明式

元字符分类:字符相配、相配次数、地方锚定、分组

澳门金沙国际 1

正则表达式

### 二,
    1) 什么是正则表明式

正则表明式: RE居尔ar EXPression, REOEXP

元字符:

       .       相配任意单个字符

       []     相称钦赐范围内的随机单个字符

       [^]  相称钦命范围外的随意单个字符

字符集合: [:space:] : 全部空白字符

                     [:punct:] : 全体标点符号

                     [正则表明式,linux运行基础之跟笔者一块学正则表明式。:lower:] :全体小写字母

                     [:upper:] :全数大写字母

                     [:digit:] :全体数字

                     [:alnum:] :全体数字和字母

                     [:alpha:] :全数字母

                     [:print:] :全数非空白字符(包涵空格)

合营次数:

*       相称其日前的字符任意次

         a , b ,ab , aab ,acb , adb , anb

         a*b

         a.*b

.*     表示任意长度的四意字符

\?   相称其前边的字符3遍或0次

\{m,n\}       相称其前方的字符至少m次,至多n次

                   示例:\{1,\}

                   示例:\{0,3\}

职责锚定:

^       锚定行首,此字符后边的随机内容必须出现在行首

$       锚定行尾,此字符前边的随意内容必须出现在行尾

^$     空白

\<或\b       锚定词首,其前面包车型地铁私自字符必须作为单词首部出现

\>或\b       锚定词尾,其前边的妄动字符必须作为单词尾巴部分出现

                    示例:#grep ‘\’

分组:

\(\)

             \(ab\)*

             后向引用:

             \一:引用第一个左括号以及与之相应的右括号所包含的装有剧情

             \2:

             \3:

                   示例:#grep ‘\(l..e\).*\1’ test.txt


那怎么是正则表明式

  • 正则表达式,又称规则表明式。(丹麦语:Regular
    Expression,在代码中常简写为regex、regexp或RE),总计机科学的一个定义。正则表平常被用来探寻、替换那多少个符合有些情势(规则)的文件
  • 正则表明式的“鼻祖”或者可直接追溯到物管理学家对人类神经系统工作规律,好了不啰嗦了本章是说怎么学正则表明式
  • 我们本章说的是linux正则表明式的就学
  • 想学正则表明式首先你得会文件命令如三剑客grep,sed,awk
  • 还有文本1些要害的文本命令来相互结合才能说学会一小点
  • 因为正则表达式灵活性13分有力,在编制程序界有百灵鸟之称
  • 那我们发轫说说他起头怎么学吧,大家先从最简便易行的发端
  • 正则表明式是您定义的、Linux工具用来过滤文本的格局模板。Linux工具(如grep,egrep)能
    够在数据流向工具时对数码实行正则表明式格局匹配。如若数量相配情势,它就会被接受并进一
    步处理。若是数量不协作格局,它就会被过滤掉。示意图如下:

澳门金沙国际 2

澳门金沙国际 3

1、基本正则表明式元字符

    正则表达式又称之为规则表明式

扩充正则表明式:

无特别表明的与原相同:

?       不需要’\’

+       相配其前方的字符至少二遍

{m,n}       不需要’\’

分组:

{}:分组

\1       \2       \3 ….

或者:

|       or

                   示例:#grep -E ‘(C|c)at’

文本处理工科具

(a)字符相称
  • . 相称任意单个字符
  • [] 匹配内定范围内的任意单个字符
  • [^] 匹配钦赐范围外的任性单个字符
  • [:alnum:] 字母和数字
  • [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
  • [:lower:] 小写字母 [:upper:] 大写字母
  • [:blank:] 空白字符(空格和制表符)
  • [:space:] 水平和垂直的空白字符(比[:blank:]包涵的范围广)
  • [:cntrl:] 不可打字与印刷的控制字符(退格、删除、警铃…)
  • [:digit:] 十进制数字 [:xdigit:]十陆进制数字
  • [:graph:] 可打印的非空白字符
  • [:print:] 可打印字符
  • [:punct:] 标点符号

    正则表达式是一个总计机的多少个定义

cat 命令

  • 本条命令我们用的极度多,1般拿来查阅文件,可是他的选项大家到不是不时用,这里给我们多啰嗦啰嗦说说她的选项,也是为了深化作者就学记念

  -A, --show-all               等价于 -vET
  -b, --number-nonblank        对非空输出行编号
  -e                           等价于 -vE
  -E, --show-ends              在每行结束处显示 $
  -n, --number                 对输出的所有行编号
  -s, --squeeze-blank          不输出多行空行
  -t                           与 -vT 等价
  -T, --show-tabs              将跳格字符显示为 ^I
  -v, --show-nonprinting       使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外
  --help                       显示此帮助信息并退出
  --version                    输出版本信息并退出

[root@localhost ~]#cat test        #普通输出
1111111111


2222222222

3333333333

[root@localhost ~]#cat -n test     #开头显示行号
     1  1111111111
     2
     3
     4  2222222222
     5
     6  3333333333

[root@localhost ~]#cat -E test     #以$结束
1111111111$
$
$
2222222222$
$
3333333333$

[root@localhost ~]#cat -s test     #超过二个空行,合并成一个
1111111111

2222222222

3333333333

[root@localhost ~]#cat -ns test   #去空行,加行号
     1  1111111111
     2
     3  2222222222
     4
     5  3333333333


[root@localhost ~]#cat x* > google_bak.tar.gz   #合并文件

[root@localhost ~]#cat test.tar.gz_?? > test.tar.gz   #可以用cat命令将被切割的多个压缩包合并成一个

[root@localhost ~]#tar -xvzf test.tar.gz            #再用tar命令解压

[root@localhost ~]#cat > aa  #从键盘录入内容到文件,回车是保存,退出Ctrl+z
4234234
234234


[root@localhost ~]#cat file1 file2 > file  #合并二个文件为一个
(b)相称次数
  • *相称前边的字符任意次,包蕴0次(贪婪情势:尽大概长的13分)
  • .*任意长度的随机字符
  • \?相配其前方的字符0或贰回
  • \+相配其眼前的字符至少3遍
  • \{n\} 相配前面包车型大巴字符n次
  • \{m,n\} 相称后面包车型大巴字符至少m次,至多n次
  • \{,n\} 相称前边的字符至多n次
  • \{n,\} 相配后面包车型大巴字符至少n次

    正则表达式为了处理大批量的文书|字符串而定义的1套规则和章程,平常被用来探寻,替换那一个符合摸个格局规则的公文
    

tail 命令

-c, --bytes=N                                        输出最后N个字节
-f, --follow[={name|descriptor}]            当文件增长时,输出后续添加的数据
-n, --lines=N                                         输出最后N行,而非默认的最后10行
--pid=PID                                              与-f合用,表示在进程ID,PID死掉之后结束.
-q, --quiet, --silen                                 从不输出给出文件名的首部
-s, --sleep-interval=S                            与-f合用,表示在每次反复的间隔休眠S秒
-v, --verbose                                         总是输出给出文件名的首部
--help                                                   显示帮助信息后退出
--version                                               输出版本信息后退出


[root@localhost ~]#tail /etc/passwd                              默认,显示最后10 行。

[root@localhost ~]#tail -n 2 /etc/passwd                     显示最后2行

[root@localhost ~]#tail -q -n k file1 file2 file3            显示多文件最后k行,并且不显示文件名的文件头

[root@localhost ~]#tail -n +k /etc/passwd                  从开头第k行处开始输出。

[root@localhost ~]#tail -f /var/log/messages              参数-f使tail不停地去读最新的内容,因此有实时监视的效果,用Ctrl+c来终止

 tail -n+10 file.txt | head -1                                   显示file.txt的第10行

[root@localhost ~]#cat 1.txt  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

[root@localhost ~]#tail 1.txt  
11
12
13
14
15
16
17
18
19
20

[root@localhost ~]#tail -3 1.txt  
18
19
20

[root@localhost ~]#tail -n 3 1.txt  
18
19
20

[root@localhost ~]#tail --lines=3 1.txt  
18
19
20

[root@localhost ~]#tail -n +14 1.txt  
14
15
16
17
18
19
20
(c)地点锚定
  • ^ 行首锚定,用于形式的最左侧
  • $ 行尾锚定,用于方式的最右
  • ^PATTE安德拉N$ 用于情势相配整行
  • ^$ 空行
  • ^[[:space:]]*$ 空白行
  • < 或 \b 词首锚定,用于单词情势的右侧
  • \> 或 \b 词尾锚定;用于单词形式的左边
  • <PATTEHummerH贰N> 相称整个单词

    
    2)为啥选用正则表达式

more 命令

- more命令是用来和man命令查看帮助用
-  空格或者f是下一页
-  按Space键:显示文本的下一屏内容。 按Enier键:只显示文本的下一行内容。 
-  按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
-   按H键:显示帮助屏,该屏上有相关的帮助信息。 按B键:显示上一屏内容。
-   按Q键:退出rnore命令。
(d)分组

\(\) 将多个或五个字符捆绑在1齐,当作四个完好无损进行处理
  如:
*\(string1\+\(string2\)\),此处括号把string2作为1个分组,string一\澳门金沙国际 ,+\(string2\)\*作为三个大的分组。

分组括号中的格局相配到的情节会被正则说明式引擎记录于个中的变量中,这些变量的命名格局为:
\1, \2, \3, …
  \1
表示从左侧起率先个左括号以及与之相配右括号之间的格局所匹配到的字符,二回类推
  依旧地点的例子: \(string1\+\(string2\)\)
  \1: string1\+\(string2\)

  \2: string2
  后向引用:引用前边的分组括号中的形式所相称字符, 而非
方式自身
  或者: |
  示例: a|b: a或b C|cat: C或cat (C|c)at:Cat或cat

    linux运转工作,大量操作命令,化繁为简。

less命令

less命令文件内容查看
less命令的效果与more13分相似,都足以用来浏览文字档案的内容,不一致的是less命令允许用户向前或向后浏览文件,而more命令只可以前进浏览。用less命令展现文件时,用PageUp键向上翻页,用PageDown键向下翻页。要剥离less程序,应按Q键。

-e:文件内容显示完毕后,自动退出
-f:强制显示文件
-g:不加亮显示搜索到的所有关键词,仅显示当前显示的关键字,以提高显示速度;
-l:搜索时忽略大小写的差异
-N:每一行行首显示行号
-s:将连续多个空行压缩成一行显示
-S:在单行显示较长的内容,而不换行显示;
-x<数字>:将TAB字符显示为指定个数的空格字符

二、扩充正则表达式

egrep = grep -E
  egrep [OPTIONS] PATTERN [FILE…]

    正则表达式高级工具:援救叁杀手 —稳步来后边讲
### 三,
    正则表明式从入门到入狱,从删库到跑路

tr转换命令

tr命令能够对来源专业输入的字符进行调换、压缩和删除。它可以将壹组字符变成另1组字符,平常用来编排优秀的单行命令,成效很有力。

用法:tr [选项]... SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。

  -c, -C, --complement             首先补足SET1
  -d, --delete                     删除匹配SET1 的内容,并不作替换
  -s, --squeeze-repeats            如果匹配于SET1 的字符在输入序列中存在连续的
                                   重复,在替换时会被统一缩为一个字符的长度
  -t, --truncate-set1              先将SET1 的长度截为和SET2 相等
字符 介绍
\\ 反斜杠
\a 终端鸣响
\b 退格
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
[root@localhost ~]#echo "TANK" |tr A-Z a-z   大写字母转小写
tank

[root@localhost ~]#echo 'tank zhang' | tr a-z A-Z    小写字线转大写
TANK ZHANG

[root@localhost ~]#cat aaa.txt       原文件
aaa

bbb

[root@localhost ~]#cat aaa.txt|tr 'a' 'c'     字母c替换字母a
ccc

bbb

[root@localhost ~]#cat aaa.txt|tr -d 'a'    删除所有字母a


bbb

[root@localhost ~]#cat aaa.txt|tr -d '\n\t' 
aaabbb
删除文件file中出现的换行'\n'、制表'\t'字符

[root@localhost ~]#cat aaa.txt|tr -s [a-zA-Z]   删除重复的字母
a

b

[root@localhost ~]#cat aaa.txt|tr -s '\n'    删除空行
aaa
bbb

[root@localhost ~]#cat aaa.txt |tr -s '\011' '\040'   用空格符\040替换制表符\011
aaa

bbb

[root@localhost ~]#tr a c < test     将test文件中的a变成c
字符 所有和指定字符相等的字符
[:alnum:] 所有的字母和数字
[:alpha:] 所有的字母
[:blank:] 所有呈水平排列的空白字符
[:cntrl:] 所有的控制字符
[:digit:] 所有的数字
[:graph:] 所有的可打印字符,包括空格
[:lower:] 所有的小写字母
[:print:] 所有的可打印字符,包括空格
[:space:] 所有呈水平或垂直排列的空白字符
[:upper:] 所有的大写字母
[:xdigit:] 所有的十六进制数
(a)字符相配
  • .任意单个字符
  • [] 钦赐范围的字符
  • [^] 不在内定范围的字符

********************************************************************************************************
    dos 通配符:
    *:任意的字符串
    (你要摸索摸个目录下的txt文件,泥就能够输入*.txt,表示目录下拥有带.txt的文件)
    ?: 代替任意单个字符
    (你恐怕输入单词会蓦然有八个字母记不住可能多少个,你就足以he??o,那样就能寻找到许多hello,heqwo,heoko等等只要那七个假名分歧就能同盟)
正则表达式–>
    \b
代表着单词的起来和结尾–>搜索单词的时候在单词的伊始结尾输入\b
    eg:你要规范搜索hello –> \bhello\b

cut命令

  • 在文件的每壹行中领取片断

-b, --bytes=LIST                                     输出 这些 字节 
-c, --characters=LIST                             输出 这些 字符 
-d, --delimiter=DELIM                          使用 DELIM 取代 TAB 做 字段(field) 分隔符 
-f, --fields=LIST                                     输出 这些 字段 
-s, --only-delimited                              不显示 没有 分隔符 的 行 

[root@localhost ~]#cat /etc/passwd | cut -b 1 |head -5      #输出文件的第一个字节
r
b
d
a
l

[root@localhost ~]#cat /etc/passwd | cut -c 1-4 |head -5    #输出文件的前四个字符
root
bin:
daem
adm:
lp:x

[root@localhost ~]#cat /etc/passwd | cut -f1 -d ':' |head -5   #以:分割文件,输出第一个字段
root
bin
daemon
adm
lp


[root@localhost ~]#cat a.txt |cut -f1,3 -d $'\t'   #1,3列
ssss    dddd
rrr     adfa



[root@localhost ~]#cut -c4 file.txt #将所有行的第四个字符打印出来。
x  
u  
l  

[root@localhost ~]#cut -c4,6 file.txt   #将每一行的第四个和第六个字符打印出来
xo  
ui  
ln  

[root@localhost ~]#cut -c4-7 file.txt  #将第四个到第七个字符打印出来,注意是闭区间。
x or  
unix  
linu  


[root@localhost ~]#cut -c-6 file.txt   #将每一行的前六个字符都打印出来
unix o  
is uni  
is lin  

[root@localhost ~]#cut -c10- file.txt  #将从起始位置到行末的所有文本都打印出来
inux os  
ood os  
good os  

[root@localhost ~]#cut -d ' ' -f2 file.txt   #定义空格为一行的分隔符,并将每一行的第二个字段打印出来
or  
unix  
linux  

[root@localhost ~]#cut -d ' ' -f2,3 file.txt    #将第二个字段和第三个字段打印出来
or linux  
unix good  
linux good 

 [root@localhost ~]#cut -d ' ' -f1-3 file.txt    #将第一个字段、第二个字段、第三个字段的内容都打印出来

[root@localhost ~]#cut -d ' ' -f-3 file.txt     #将前三个字段都打印出来
(b)匹配次数
  • *:相称前面字符任意次
  • ?: 0或1次
  • +: 3回或频仍
  • {m}:匹配m次
  • {m,n}:至少m,至多n次

  

paste命令

  • 用法:paste [选项]… [文件]…
    -d, –delimiters=列表 改用内定列表里的字符替代制表分隔符
    -s, –serial 不接纳平行的行目输出形式,而是各类文件占用1行

[root@localhost ~]#paste test1 test     合并输出二文件
asdfasdfas  1234
asdfasdf    

[root@localhost ~]#echo -n "aaa" | paste -s   对输出的内容独立占一行
aaa 
(c)地方锚定
  • ^ :行首
  • $ :行尾
  • \<, \b :语首
  • \>, \b :语尾

    

wc命令

  • wc命令的功用为总计钦赐文件中的字节数、单词数、行数,
    并将计算结果突显输出

-c, --bytes                    印字节数
-m, --chars                    打印字符数 
-l, --lines                    打印行数
-L, --max-line-length          打印最长行的长度
-w, --words                    打印单词数

[root@localhost ~]#cat /etc/passwd |wc -l    查看passwd文件有多少行
38

[root@localhost ~]#echo "aaa bbb ccc" |wc -w    查看输出有多少个单词
3

[root@localhost ~]#echo "12344" |wc -m  查看输出有多少个字符
6
(d)分组
  • ()
    后向引用: \1, \2, …
  • 或者:
    a|b:a或b
    C|cat:C或cat
    (C|c)at:Cat或cat
* 重复零次或更多次
+ 重复一次或更多次
? 重复零次或一次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次

sort命令

  • 用法:sort [选项]… [文件]…

 -b, --ignore-leading-blanks           略前导的空白区域
 -d, --dictionary-order                只考虑空白区域和字母字符
 -f, --ignore-case                     忽略字母大小写
 -g, --general-numeric-sort            按照常规数值排序
 -i, --ignore-nonprinting              只排序可打印字符
 -h, --human-numeric-sort              使用易读性数字(例如: 2K 1G)
 -n, --numeric-sort                    根据字符串数值比较
 -R, --random-sort                     根据随机hash 排序
      --random-source=文件              从指定文件中获得随机字节
 -r, --reverse                         逆序输出排序结果
 -V, --version-sort                    在文本内进行自然版本排序
 -r                                    执行反方向(由上至下)整理
 -n                                    执行按数字大小整理
 -t                                    c 选项使用c 做为字段界定符
 -k                                    X 选项按照使用c 字符分隔的X

[root@localhost ~]#cat /etc/passwd | sort                 

 sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。

[root@localhost ~]#cat /etc/passwd | sort -t ':' -k 3       
/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何

[root@localhost ~]#cat /etc/passwd | sort -t ':' -k 3n      
用数字排序,默认是以字符串来排序的

[root@localhost ~]#cat /etc/passwd | sort -t ':' -k 3nr      
倒序排列,默认是升序排序

[root@localhost ~]#cat /etc/passwd | sort -t':' -k 6.2,6.4 -k 1r      
对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序

[root@localhost ~]#cat /etc/passwd |  sort -t':' -k 7 -u      
查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重

***********************************************************************************************************

uniq命令

  • 用法:uniq [选项]… [文件]
  • 从输入文件只怕专业输入中筛选相邻的匹配行并写入到输出文件或专业输出,不附加别的选拔时匹配行将在第3回面世处被统一,周边的就要会删除

 -c, --count                          在每行前加上表示相应行目出现次数的前缀编号
  -d, --repeated                      只输出重复的行
  -D, --all-repeated[=delimit-method  显示所有重复的行
  -f, --skip-fields=N                 比较时跳过前N 列
  -i, --ignore-case                   在比较的时候不区分大小写
  -s, --skip-chars=N                  比较时跳过前N 个字符
  -u, --unique                        只显示唯一的行
  -z, --zero-terminated               使用'\0'作为行结束符,而不是新换行
  -w, --check-chars=N                 对每行第N 个字符以后的内容不作对照

[root@localhost ~]#cat uniqtest    测试文件
this is a test  
this is a test  
this is a test  
i am tank  
i love tank  
i love tank  
this is a test  
whom have a try  
WhoM have a try  
you  have a try  
i want to abroad  
those are good men  
we are good men  

[root@localhost ~]#uniq -c uniqtest    uniq的一个特性,检查重复行的时候,只会检查相邻的行。重复数据,肯定有很多不是相邻在一起的
 3 this is a test
 1 i am tank
 2 i love tank
 1 this is a test          和第一行是重复的
 1 whom have a try
 1 WhoM have a try
 1 you? have a try
 1 i want to abroad
 1 those are good men
 1 we are good men

[root@localhost ~]#sort uniqtest |uniq -c      这样就可以解决上个例子中提到的问题
 1 WhoM have a try  
 1 i am tank  
 2 i love tank  
 1 i want to abroad  
 4 this is a test  
 1 those are good men  
 1 we are good men  
 1 whom have a try  
 1 you  have a try  

[root@localhost ~]# uniq -d -c uniqtest      uniq -d 只显示重复的行
 3 this is a test  
 2 i love tank  

[root@localhost ~]# uniq -D uniqtest       uniq -D 只显示重复的行,并且把重复几行都显示出来。他不能和-c一起使用
 this is a test  
 this is a test  
 this is a test  
 i love tank  
 i love tank  

[root@localhost ~]#uniq -f 1 -c uniqtest    在这里those只有一行,显示的却是重复了,这是因为,-f 1 忽略了第一列,检查重复从第二字段开始的。
 3 this is a test  
 1 i am tank  
 2 i love tank  
 1 this is a test  
 2 whom have a try  
 1 you  have a try  
 1 i want to abroad  
 2 those are good men     只有一行,显示二行  

[root@localhost ~]#uniq -i -c uniqtest     检查的时候,不区分大小写
 3 this is a test  
 1 i am tank  
 2 i love tank  
 1 this is a test  
 2 whom have a try  #一个大写,一个小写  
 1 you  have a try  
 1 i want to abroad  
 1 those are good men  
 1 we are good men  

[root@localhost ~]#uniq -s 4 -c uniqtest    检查的时候,不考虑前4个字符,这样whom have a try 就和 you have a try 就一样了。
 3 this is a test  
 1 i am tank  
 2 i love tank  
 1 this is a test  
 3 whom have a try    根上一个例子有什么不同  
 1 i want to abroad  
 1 those are good men  
 1 we are good men  

[root@localhost ~]#uniq -u uniqtest     去重复的项,然后全部显示出来
 i am tank  
 this is a test  
 whom have a try  
 WhoM have a try  
 you  have a try  
 want to abroad  
 those are good men  
 we are good men 

[root@localhost ~]#uniq -w 2 -c uniqtest  对每行第2个字符以后的内容不作检查,所以i am tank 根 i love tank就一样了。
 3 this is a test  
 3 i am tank  
 1 this is a test  
 1 whom have a try  
 1 WhoM have a try  
 1 you  have a try  
 1 i want to abroad  
 1 those are good men  
 1 we are good men  

[root@localhost ~]#grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' /var/log/nginx/access.log |sort |uniq -c    查看nginx访问IP数
      1 101.200.78.64
      2 103.41.52.94
      1 106.185.47.161
      2 113.240.250.155
    260 13.0.782.215
      2 185.130.5.231
     26 192.168.10.16
      6 192.168.10.17
    148 192.168.10.2
    189 192.168.10.202
    270 192.168.10.222
     25 192.168.10.235
    291 192.168.10.3
     12 192.168.10.5
      2 23.251.63.45
     20 7.0.11.0

    (壹)延续次数的合作

diff 和 patch命令

  • diff相比较3个文件的界别

[root@localhost ~]#diff test1.rb test.rb            比较二个文件的不同



[root@localhost ~]#diff myweb/ html/                  比较二个文件夹的不同
  • patch

[root@localhost ~]#diff -Nrua linux-2.6.14/Makefile  linux-2.6.26/Makefile >c.patch #cat c.patch

      澳门金沙国际 4

grep命令

  • grep的劳作格局是那般的,它在3个或七个公文中搜寻字符串模板。假设模板蕴涵空格,则必须被引述,模板后的保有字符串被看做文件名。搜索的结果被送到荧屏,不影响原来的文章件内容。
  • grep 家族分为,3大类分别是grep ,egrep,fgrep,fgrep不帮助正则表达式
  • 大家那边只说grep,egrep下次在说

 --color=auto:  对匹配到的文本着色显示
 -v:  显示不被pattern 匹配到的行
 -i:  忽略字符大小写
 -n: : 显示匹配的行号
 -c:  统计匹配的行数
 -o:  仅显示匹配到的字符串
 -q:  静默模式,不输出任何信息
 -A #: after,  后#行 行
 -B #: before,  前#行 行
 -C # :context,  前后各#行 行
 -e :实现多个选项间的逻辑or 关系
 -w :匹配 整个单词
 -E :使用ERE
 -F :相当于fgrep
 -E, --extended-regexp     扩展正则表达式egrep
 -F, --fixed-strings       一个换行符分隔的字符串的集合fgrep
 -G, --basic-regexp        基本正则
 -P, --perl-regexp         调用的perl正则
 -e, --regexp=PATTERN      后面根正则模式,默认无
 -f, --file=FILE           从文件中获得匹配模式
 -w, --word-regexp         匹配整个单词
 -x, --line-regexp         匹配整行
 -z, --null-data           一个 0 字节的数据行,但不是空行

测试文件   /etc/passwd  里面用到了正则表达式和扩展正则表达式

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa
DADddd:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po

a,匹配含有root的行

[root@localhost ~]#grep root test  
root:x:0:0:root:/root:/bin/bash  

b,匹配以root开头或者以zhang开头的行,注意反斜杠

[root@localhost ~]#cat test |grep '^\(root\|zhang\)'  
root:x:0:0:root:/root:/bin/bash  
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  

c,匹配以root开头或者以zhang开头的行,注意反斜杠,根上面一个例子一样,-e默认是省去的

[root@localhost ~]#cat test |grep -e '^\(root\|zhang\)'  
root:x:0:0:root:/root:/bin/bash  
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  

d,匹配以zhang开头,只含有字母

[root@localhost ~]#echo 'zhangying' |grep '^zhang[a-z]*$'  
zhangying  

e,匹配以bin开头的行,用的egrep,在这里可以换成-F,-G

[root@localhost ~]#cat test |grep -E '^bin'  
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa  

f,在匹配的行前面加上该行在文件中,或者输出中所在的行号

[root@localhost ~]#cat test|grep -n zhangy  
7:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  
13:ba:x:1002:1002::/home/zhangy:/bin/bash  
15:@zhangying:*:1004:1004::/home/test:/bin/bash 

g,不匹配以bin开头的行,并显示行号

[root@localhost ~]#cat test|grep -nv '^bin'  
root:x:0:0:root:/root:/bin/bash
DADddd:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/home/ftp:/bin/false
&nobody:$:99:99:nobody:/:/bin/false
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash
http:x:33:33::/srv/http:/bin/false
dbus:x:81:81:System message bus:/:/bin/false
hal:x:82:82:HAL daemon:/:/bin/false
mysql:x:89:89::/var/lib/mysql:/bin/false
aaa:x:1001:1001::/home/aaa:/bin/bash
ba:x:1002:1002::/home/zhangy:/bin/bash
test:x:1003:1003::/home/test:/bin/bash
zhangying:*:1004:1004::/home/test:/bin/bash
policykit:x:102:1005:Po

h,显示匹配的个数,不显示内容

[root@localhost ~]#cat test|grep -c zhang  
3  

i,匹配system,没有加-i没有匹配到东西。

[root@localhost ~]#grep  system test  
[root@localhost ~]#grep -ni  system test  
9:dbus:x:81:81:System message bus:/:/bin/false  

j,匹配zhan没有匹配到东西,匹配zhangy能匹配到,因为在test文件中,有zhangy这个单词

[root@localhost ~]#cat test|grep -w zhan  
[root@localhost ~]#cat test|grep -w zhangy  
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  
ba:x:1002:1002::/home/zhangy:/bin/bash  

k,在这里-x后面东西,和输出中的整行相同时,才会输出

[root@localhost ~]#echo "aaaaaa" |grep -x aaa  
[root@localhost ~]#echo "aaaa" |grep -x aaaa  
aaaa  

l,最多只匹配一次,如果把-m 1去掉的话,会有三个

[root@localhost ~]#cat test |grep -m 1 zhang  
zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  


m,匹配行的前面显示块号,这个块号是干什么的,不知道,有谁知道可否告诉我一下

[root@localhost ~]#cat test |grep -b zha  
241:zhangy:x:1000:100:,,,:/home/zhangy:/bin/bash  
480:ba:x:1002:1002::/home/zhangy:/bin/bash  
558:@zhangying:*:1004:1004::/home/test:/bin/bash  

n,多文件匹配时,在匹配的行前面加上文件名

[root@localhost ~]#grep -H 'root' test test2 testbak  
test:root:x:0:0:root:/root:/bin/bash  
test2:root  
testbak:root:x:0:0:root:/root:/bin/bash  

o,多文件匹配时,在匹配的行前面不加上文件名

[root@localhost ~]#grep -h 'root' test test2 testbak  
root:x:0:0:root:/root:/bin/bash  
root  
root:x:0:0:root:/root:/bin/bash  

p,多文件匹配时,显示匹配文件的文件名

[root@localhost ~]#grep -l 'root' test test2 testbak DAta  
test  
test2  
testbak  

q,没有-o时,有一行匹配,这一行里面有3个root,加上-o后,这个3个root就出来了

[root@localhost ~]#grep  'root' test  
root:x:0:0:root:/root:/bin/bash  
[root@localhost ~]#grep -o 'root' test  
root  
root  
root  

r,递归显示匹配的内容,在test目录下面建个mytest目录,copy test目录下面的test文件到mytest下面,能看到上面的结果

[root@localhost ~]#grep test -R /tmp/test/mytest  
/tmp/test/mytest/test:test:x:1003:1003::/home/test:/bin/bash  
/tmp/test/mytest/test:@zhangying:*:1004:1004::/home/test:/bin/bash  

s,显示匹配root后面的3行

[root@localhost ~]#cat test |grep -A 3 root  
root:x:0:0:root:/root:/bin/bash  
bin:x:1:1:bin:/bin:/bin/false,aaa,bbbb,cccc,aaaaaa  
daemon:x:2:2:daemon:/sbin:/bin/false  
mail:x:8:12:mail:/var/spool/mail:/bin/false  



 递归从所有文件中查询匹配的内容,文件名可不同

 [root@localhost ~]#grep -R C1079651000621  *   
20150727/503/20150701000104001317.xml:            C1079651000621
20150727/503/20150701000104001317.xml:            C1079651000621
20150727/503/20150701000104001333.xml:            C1079651000621

      模拟条件内容

正则表明式

        什么叫一而再相称次数呢?便是合营单个次数内容多少个

基本正则表明式

  • 咱俩先说字符相配
  • 正则表明式和大家在此以前所说的文本通配符很一般,
    正则表达式用来不是来处理文件的名称
  • 他卓越的是文件的剧情依然是字符串,
    可是相对化要搞领悟正则表明式来处理的是文本文件,只怕是字符串而不是文件名,通配符的相称的是文本名,他是文件名里面包车型地铁特定字符串,而正则表明式里面包车型地铁是配合的字符串,那一个字符串大概是文件内容之中的字符串,当然也只怕是命令执行结果在那之中的字符串。
  • -正则表达式的机能很强也分了好多类别分为,字符相配,相配次数,地方锚定,分组
  • 其有用于字符相称的,大家叫字符相配
  • 也有同盟有个别字符重复次数的,我们叫相配次数
  • 也足以用来的确那几个字符出现的岗位的,我们叫地点锚定
  • 也足以把三个字符用来合成二个全体,我们叫分组
  • 就此正则表明式的机能拾贰分强
  • 正则表明式用到了有的特殊符号,我们叫元字符
  • 若是想详细的看能够用帮助命令,man 柒
  • 小编们先看字符相称

    澳门金沙国际 5

字符相称

    要同盟多个字符的时候用grep搜索,然而一旦要合作十个呢??一百个??你会一贯输入100个字符吗??那必然不行的。所以大家就引入四个{n}需求相称的次数。

. 字符

  • 设若本身要合营二个的单纯字符用. 就要能够了,.代表单一的三个字符
  • .是相配三个文件中的内容中的一个单一的字符
  • 诸如小编要合营七个内容中的贰个字符

[root@localhost ~]# echo abcd|grep a.
abcd
[root@localhost ~]# echo abcd|grep a..
abcd
[root@localhost ~]# echo abcd|grep a…
abcd

  • 自个儿加八个点就多相称多个,不过那个adcd相配吗,相配前给你列出来了,可是她只会给他,相称到的丰硕颜色,汉字也会相称哦,所以说她同盟的是随便字符,注意了点是合作的自由字符,不表示他们分外的是同3个字符

[root@localhost ~]# grep r..t /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

  • 看他方面相配的是随机字符不只极度root,r/ft都协作到了,那正是匹配任意字符
  • 同一点也象征二个字符

    澳门金沙国际 6

[ ]中括号 字符

  • []中括号在正则表明式中,他也是意味多个字符,表示中间的私下一个字符,可是她合营的是字符串

  • 下边这一个命令表示大概是ar ,cr,br的命令

[root@localhost ~]# echo ar br cr |grep [ab]r
ar br cr

  • ar,cr 是合营的cr本身没说,所以不带有

  • 这是[] 中括号中意味任意的单纯的三个字符,他取的是中档的二个字符
  • 再者依然二选一的,或然是多选1的
  • 自然了小编没还足以取反

    斜杆是转义字符:你想相配多少个b就写多大就行呐。

[^ ] 取反字符

  • [^ ] 取反的情趣正是同盟内定范围外的即兴单个字符
  • 取反意思便是,除了[]不要,别的的都要的情致
  • 也正是如果不是以此界定内的,其余随意字符都行

[root@localhost ~]# echo ar br cr |grep [^ab]r
ar br cr

    这一个相配会吧含有更加多的内容输出假使您只想相称当前个数的话能够用<>  

协作次数

        澳门金沙国际 7

* 字符

  • * 的情致是不明确次数,包蕴0
  • 留神她再也的是前面那几个字符任意次,不是单词任意次

[root@localhost ~]# grep goo*gle 11.txt
google
gooooooooooogle

 

. * 字符

  • .* 的含义是任意长度的字符串

[root@localhost ~]# grep g.*gle 11.txt
google
gooooooooooogle
gooooogle
goooooooogle

    可是忽然你想要匹配三到四个b的内容吗??哎哎真会出题。

\ ? 字符

  • 她的情致是相配那一个字符串前边的这一个字符出现1次或者0
  • 简短的说正是0次不怕未有,二回正是有

[root@localhost ~]# grep “go?gle” 11.txt
ggle
gogle

    不知情聪明的人有未有想到{n,m}意思正是起码n,至多m。

\ + 字符

  • 当然了大家也得以象征1次以上,包含1

[root@localhost ~]# grep “go+gle” 11.txt
google
gooooooooooogle
gooooogle
goooooooogle
gogle

    

{N} 字符

  • 匹配前面N次
  • 若果我们想相称5次,或2次

[root@localhost ~]# grep “go{5}gle” 11.txt
gooooogle
[root@localhost ~]# grep “go{2}gle” 11.txt
google

  • 他还足以象征多少个以上

[root@localhost ~]# grep “go{2,}gle” 11.txt
google
gooooooooooogle
gooooogle
goooooooogle

  • 还足以表示范围

[root@localhost ~]# grep “go{2,5}gle” 11.txt
google
gooooogle

  • 还足以象征以下
    [root@localhost ~]# grep “go{,5}gle” 11.txt
    google
    gooooogle
    ggle
    gogle

  • 以上是相配次数

  澳门金沙国际 8

职位锚定

      所以引申出来了{,m}表示至多m,至少0

^ 锚定 首行

[root@localhost ~]# grep "^root"  /etc/passwd
root:x:0:0:root:/root:/bin/bash
  • 在外边的 托字符^趣味是不以他开端
  • 在里边的托字符 [^ ] 在内部是以她初步

      

$ 字符

  • $ 是显得从尾巴部分展现

[root@localhost ~]# grep bash$  /etc/passwd
root:x:0:0:root:/root:/bin/bash
mageedu:x:1000:1000:mageedu:/home/mageedu:/bin/bash
mage:x:1001:1001::/home/mage:/bin/bash
wang:x:1002:1002::/home/wang:/bin/bash
shadow:x:0:1003::/home/shadow:/bin/bash
hyma:x:0:1004::/home/hyma:/bin/bash
  • 也能够和任何来协作使用

[root@localhost ~]# grep ^google$ 11.txt
google
  • 当然即使^$ 连着写是代表空行

[root@localhost ~]# grep -n ^$ 11.txt
1:
2:
3:
4:
5:
6:
7:
8:
15:
16:
17:
18:
19:
20:
22:
31:
  • 还能用她来裁撤空行

[root@localhost ~]# grep -nv ^$ 11.txt
9:google
10:gooooooooooogle
11:gooooogle
12:goooooooogle
13:ggle
14:gogle
21:        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
23:lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
24:        inet 127.0.0.1  netmask 255.0.0.0
25:        inet6 ::1  prefixlen 128  scopeid 0x10<host>
26:        loop  txqueuelen 1  (Local Loopback)
27:        RX packets 6  bytes 446 (446.0 B)
28:        RX errors 0  dropped 0  overruns 0  frame 0
29:        TX packets 6  bytes 446 (446.0 B)
30:        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • 单词锚定

[root@localhost ~]# grep   "^\<lilin\>" /etc/passwd  
lilin:x:1003:1005::/home/lilin:/bin/bash
  • 起来单词锚定

[root@localhost ~]# grep   "^\<lilin" /etc/passwd  
lilin:x:1003:1005::/home/lilin:/bin/bash
  • 单词的左左侧际

[root@localhost ~]# grep "^\<root\>"  /etc/passwd
root:x:0:0:root:/root:/bin/bash
  • 也得以用\b来表示边界

[root@localhost ~]# grep "^\broot\b"  /etc/passwd 
root:x:0:0:root:/root:/bin/bash

 

分组

  • 她是把几个字符串,作为一个完全来用

[root@localhost ~]# echo rererererre |grep "\(re\)\{3\}" 
rererererre
字符 说明
. 匹配任意单个字符
[ ] 匹配指定范围内的任意单个字符
[^ ] 匹配指定范围外的任意单个字符
[:alnum:] 字母和 数字
[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] 小写字母 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:] 包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…) )
[:digit:] 字 十进制数字 [:xdigit:] 十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
  • 如上是linux基本正则表达式元字符
  • 正则表达式分为两大类分别是BRE基本的正则表明式,ERE 增添的正则表明式
BRE元符 说明 举例
. 相配单个字符 a.c
[ ] 合营范围内随机单个字符 [a-z]
[ ] [[:digit:]]:相称0-玖里面包车型地铁数字 1[[:digit:]]
[ ] [[:alpha:]]:相配任意字母字符,不区分轻重缓急写

a[[:alpha:]]|
|[ ] | [[:alnum:]]:相称任意字母数字字符0-玖,a-z和 A-Z |
a[[:alnum:]]789|
|[ ] | [[:blnk:]]:相配空格或制表符 |Hello[[:blank:]]world |
|[ ] | [[:lower:]]:相配小写字母a-z |abcde[[:lower:]]g |
|[ ] | [[:upper:]]:相配小写字母A-Z|ABCDEF[[:upper:]]G |
|[ ] | [[:prit:]]:相配任意可打字与印刷字符 | |
|[ ] | [[:punct:]]:匹配标点符号|attention[[:punct:]] |
|[ ] | [[:space:]]]:相称任意空白字 | Hello[[:blank:]]world
|
|[^ ] | 相配范围外任意单个字符 | [^a-z]|
|* | 相称求按摩的字符任意次(0,壹或频仍) | ab |
|.
| .轻易长度的任意字符 | . 整行 |
|+ | 相称前边的字符至少一回| a+b |
|? | 相称后边的0或三次 |a?b |
|{m} | 其前边的字符出现m次,m为非负整数 | a{2.4} |
|{m,n} | 其前边的字符出现m次,m为非负整数|b{二,4} |
|^ | 行首相配 | ^Head |
| $| 行位相称 | tail$ |
| <或>\b | 相称单词左侧 | \Hello |
|>或\b | 相称单词右边 | hello> |
|(x) | 将此x相配到的字符当做全部进行拍卖| |
|(x) | pat1(pat2)pat3(pat4(pat5)pat6) | \2 引用is |
|(x) | \n:第n个括号的卓殊格局所相配到的内容 | |

  • 上述是正则表达式BRE的元字符
    -以下是正则表明式ERE的元字符
ERE元符 说明 举例
. 相称单个字符 a.c
[ ] 协作范围内4意单个字符 [a-z]
[ ] [[:digit:]]:匹配0-九以内的数字 1[[:digit:]]
[ ] [[:alpha:]]:相配任意字母字符,不区分轻重缓急写

a[[:alpha:]]|
|[ ] | [[:alnum:]]:相称任意字母数字字符0-九,a-z和 A-Z |
a[[:alnum:]]789|
|[ ] | [[:blnk:]]:相配空格或制表符 |Hello[[:blank:]]world |
|[ ] | [[:lower:]]:相配小写字母a-z |abcde[[:lower:]]g |
|[ ] | [[:upper:]]:匹配小写字母A-Z|ABCDEF[[:upper:]]G |
|[ ] | [[:prit:]]:相配任意可打字与印刷字符 | |
|[ ] | [[:punct:]]:匹配标点符号|attention[[:punct:]] |
|[ ] | [[:space:]]]:相称任意空白字 | Hello[[:blank:]]world
|
|[^ ] | 相称范围外任意单个字符 | [^a-z]|
|* | 相称求水疗的字符任意次(0,1或频繁) | ab |
|.
| .私行长度的任意字符 | . 整行 |
|?| 相称后边的0次或3次 | a?b |
|{m} | 其眼下的字符出现m次,m为非负整数 | a{4}|
|{m,n} | 其近年来的字符出现m次,m为非负整数;[m,n] | b{2.4}|
|^ | 行首相配 | ^Head |
| $| 行位匹配 | tail$ |
| <或\b| 相配单词左边| <hello> |
| >或\b | 相配单词左侧| hello> |
|(x) | 将此x相称到的字符当做全部进行处理| |
|(x) | pat1(pat2)pat3(pat4(pat5)pat6) | \2 引用is |
|(x) | \n:第n个括号的合作格局所相配到的剧情 |

  • 再有最终3个|
    线由于编制程序的争辩不可能填写进表格里面他的成效是,相称左边或右手

      大家再来认识下*

        表示相称前2个字符任意次数

        澳门金沙国际 9

      任意次的话也包罗零次,只要是a可能ab就会被相称

  澳门金沙国际 10

    每一天相配这么多肯定没意思啊

      大家来认识下\?  \+

      \? 表示格外其前边字符0次照旧2回,就是要么未有只怕一遍

    澳门金沙国际 11

    \+ 代表十分前边的字符至少一遍,也正是必须有3个字符

    澳门金沙国际 12

     然则必须有多少个啊,他也足以有多少个。上不封顶呢。

    .  表示至极任意的单个字符

    澳门金沙国际 13

    图中已显示了a后边相称了三个字符及以上的内容,不明了的话滴滴笔者

    

    那里能够看到相称的字符里面还有数字,你大概用到的是子要求特出字母在正则表明式上字母表明为[[:alpha:]] 

    澳门金沙国际 14

 

     所以那样就会帮您协作到纯字母的内容

  倘使你还觉得这几个不苛刻的话不要紧还要来个门道十分的是小写字母:[[:lower:]]

    澳门金沙国际 15

    为了编写翻译环境零时添加的,你能够尝尝上一个下令,看相称的始末

    然后投入须要同盟大写字母的话:  [[:upper:]]

      澳门金沙国际 16

     好了剩下内容就咱们温馨测试啦:

      [[:alpha:]] 表示任意大小的字母

      [[:lower:]]  代表小写字母

      [[:upper:]]  代表任意大写字母

      [[:digit:]]  表示0到玖里面包车型大巴任性数字

      [[:alnum:]]  代表任意数字和字母

      [[:space:]]  代表任意空白字符包蕴空格 tab键

      [[:punct:]]  代表任意标点符号

       澳门金沙国际 17

      澳门金沙国际 18

       澳门金沙国际 19

      

      澳门金沙国际 20

      澳门金沙国际 21

       最终二个仅相配A-Z以内的大写字母

      所以引申出 [   ]  里面 相称内定范围内的任意字符
,但貌似都以协作三个字符

     澳门金沙国际 22

    [^  ] 我们来看下那么些吧??你是还是不是会以为如何锚钉底部??

    不是的呀,,那个代表钦赐范围外的单个字符,,与 [ ] 相反

    澳门金沙国际 23

    那几个东西与地点所得[^[:lower:]]  那样也得以用 都能用

 

    澳门金沙国际 24

    

    \d  也是表示数字的啊,,单个数字相当测试下唉

    那些字符计算在最上边啦,,,,,,不愿意翻??作者给您cp了呀

    

. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$

匹配字符串的结        

\D 表示任意单个非数字字符
\t 表示匹配单个横向字符就是相当于tab键
\S 表示匹配非空白字符
   

     

 

相关文章