zl程序教程

您现在的位置是:首页 >  系统

当前栏目

linux正则表达式与cut命令

2023-09-11 14:19:53 时间

cut命令

cut -d '分隔符' -f1:表示使用指定的分隔符将内容分割,并取走分割的第一块内容

cut -d '分隔符' -f1,2,3 :表示取出分隔符分完后的1,2,3列

cut -c1-2:表示只取走内容的第1个到第2个的字符

cut -c-2:表示只提取前2个字符

cut -c5-:表示只提取结尾的5个字符

正则表达式

反斜杆“\”:可以对具有特殊含义的字符进行转义,比如点号“.”

字符匹配元字符主要包括点号".",方括号"[ ]"

点号点号可以代替任意单个字符,相当于通配符中的“?”

方括号其功能与通配符中的方括号一致,[a-z]代表a到z中的任意一个字符,[A-Z]代表A到Z的任意一个字符,[a-zA-Z0-9]代表任意字符,同时还具有使用“!”或者“^”去代表非逻辑,比如[!a-z]代表除了a-z其他的字符。方括号最好于大括号{}一起使用,使用方括号指定字符的类型,使用大括号去指定字符的个数。

^a字符:在a字符前面加上“^”字符,则表示找出以a字符开头的内容,其他以此类推

例子:grep "^[Aa]" /etc/passwd

找出/etc/passwd 文件中以A或a开头的内容

$字符:在字符的尾部加上美元符号,代表查找以美元字符前的字符串结尾的内容。

例子:root$

该例子代表查找以root结尾的内容

星号*:星号代表匹配前面的字符X次,这个次数是0到无穷

例子:x*y,这个正则表达式就代表匹配以y结尾的内容,同时y前面出现0次或者任意次x的内容

因为x的次数可以为0,也可以是无穷次,所以即便y的前面没有出现x,也是符合标准的,而出现x也是符合标准的。我们一般将星号与"."点号相结合,比如我们可以用正则表达式去表示通配符中的星号*,也就是任意数量的字符。“.*”,因为点号可以代表任意字符,而星号又代表前面的字符为任意个,所以由此达成与通配符中“*”星号的效果。

问号?:代表匹配前面的字符1次或者0次,但是?在正则表达式中有特殊的作用,所以我们需要将使用问号的时候,需要在前面加上反斜杆用作转义“\”,

例子:r./?./?t

因为问号的功能是匹配前面的字符0到1次,且上述例子中问号前面的字符都是点好,也就是任意单个字符,所以这个例子代表查找,字符个数在4个到2个之间,且开头字符为r,结尾字符为t的内容。

加号+:加号代表前面的字符至少匹配一次,同时它的使用必须加上反斜杆"\"

例子:r\+t

这个例子就代表匹配t前面出现至少一次r的内容,可以是rt,rrt,或者rrrt,但是不可能只出现一个t。

{}大括号:大括号的两个括号都需要使用反斜杆“\”转义,同时在大括号里面加入想要匹配的次数,如\{5\},这个就代表匹配5次,同时还可以输入\{m,n\},代表至少m次,至多n次。\{m,\}这个代表至少m次,至多不限制,\{,n\}这个代表至少不限,至多n次。

例子1:ro\{2\}t

因为大括号的前面出现的字符是o,且大括号里面的数字是2,代表匹配两次,所以这个例子就代表查找root的相关内容。

例子2:ro\{1,2\}t

因为里面输入的形式是\{m,n\},所以该例就代表查找rot或者root的内容。

小括号():如果我们想要去指定某个字符串出现的次数,就需要用()将其包括,但是使用小括号的时候也需要使用反斜杠进行转义。

例子\(ro\)\{2\}

这个就代表查找roro的内容。

\w 匹配数字字母下划线(小写w)。

\W 匹配非数字字母下划线(大写W)。

\s 匹配空格、制表符、换行符(小写s)。

\S 匹配非空白符(大写S)。

PS!!!!

但是在linux中,这些转义后具有特别含义的元字符只能单独使用,不能结合*,+或者{number},当我们将上面这些转义字符放在[]方括号中好像连他原来的含义都失去了,所以如果要使用代表这些含义的正则字符,建议使用下面介绍的posxi字符。

“=~” :判断该符号左边的字符串是否满足右边的正则表达式,且使用该判断符,必须将被比较的字符串放入两个方括号的内部[[  ]]

POSIX字符:


[:alnum:]    #文字数字字符   
 
[:alpha:]    #文字字符   
 
[:digit:]    #数字字符   
 
[:graph:]    #非空字符(非空格、控制字符)   
 
[:lower:]    #小写字符   
 
[:cntrl:]    #控制字符   
 
[:print:]    #非空字符(包括空格)   
 
[:punct:]    #特殊符号,差不多键盘上非非字符和数字的符号都匹配
 
[:space:]    #所有空白字符(空格,制表符)   
 
[:upper:]    #大写字符   
 
[:xdigit:]   #十六进制数字(0-9,a-f,A-F)


PS!!!在使用posix字符必须要使用方括号进行包括,比如[[:alnum:]],上面红色标注的是我觉得比较重要的posix字符,而且这个posix好像只能在linux的工具中使用!!!!

拓展正则表达式

同上面所有提到的要使用反斜杆转义的符号比如“?”,“+”,“{}” “()”都不需要使用反斜杆,且上述不使用反斜杆的也可以进行使用,但是必须使用egrep 或者grep -E。

egrep -o:可以提取只符合正则表达式的内容