linuxshell字符串开头,shell字符串匹配的实现

linuxshell字符串开头,shell字符串匹配的实现

2023年8月3日发(作者:)

linuxshell字符串开头,shell字符串匹配的实现⼀、简介Bash Shell提供了很多字符串和⽂件处理的命令。如awk、expr、grep、sed等命令,还有⽂件的排序、合并和分割等⼀系列的操作命令。grep、sed和awk内容⽐较多故单独列出,本⽂只涉及字符串的处理和部分⽂本处理命令。⼆、字符串处理1、expr命令expr引出通⽤求值表达式,可以实现算术操作、⽐较操作、字符串操作和逻辑操作等功能。(1)计算字符串长度字符串名为string,可以使⽤命令${#string}或expr length $string两种⽅法来计算字符串的长度。若string包括空格,需⽤双引号引起来(expr length后⾯只能跟⼀个参数,string有空格会当作多个参数处理)。(2)⼦串匹配索引expr的索引命令格式为:expr index $string $substring(⼦串),在字符串$string上匹配$substring中字符第⼀次出现的位置,匹配不到,expr index返回0。"wo"在字符串string中虽然出现在第7,但还是返回o⾸次出现的位置5。(3)⼦串匹配的长度expr match $string $substring,在string的开头匹配substring字符串,返回匹配到的substring字符串的长度,若string开头匹配不到则返回0,其中substring可以是字符串也可以是正则表达式。"world"尽管在string中出现,但是未出现在string的开头处,因此返回0。(4)抽取⼦串Bash Shell提供两种命令#{...}和expr实现抽取⼦串功能。其中#{...}有两种格式。格式⼀:#{string:position}从名称为$string的字符串的第$position个位置开始抽取⼦串,从0开始标号。格式⼆:#{string:position:length}增加$length变量,表⽰从$string字符串的第$position个位置开始抽取长度为$length的⼦串。(都是从string的左边开始计数抽取⼦串)#{...}还提供了从string右边开始计数抽取⼦串的功能。格式⼀:#{string: -position},冒号与横杠间有⼀个空格格式⼆:#{string:(position)}expr substr也能够实现抽取⼦串功能,命令格式:expr substr $string $position $length,与#{...}最⼤不同是expr substr命令从1开始进⾏标号。接着使⽤正则表达式抽取⼦串的命令,但只能抽取string开头处或结尾处的⼦串。抽取字符串开头处的⼦串,格式⼀:expr match $string ' $substring '。格式⼆:expr $string : ' $substring ',其中冒号前后都有⼀个空格。抽取字符串结尾处的⼦串,格式⼀:expr match $string '.* $substring '。格式⼆:expr $string : '.* $substring '。.*表⽰任意字符的任意重复。(5)删除⼦串删除字串是指将原字符串中符合条件的⼦串删除,命令只有${...}格式。从string开头处删除⼦串,格式⼀:${string#substring},删除开头处与substring匹配的最短⼦串。格式⼆:${string##substring}删除开头处与substring匹配的最长⼦串。其中substring并⾮是正则表达式⽽是通配符。从string结尾处开始删除,格式⼀:${string%substring},删除结尾处与substring匹配的最短⼦串。格式⼆:${string%%substring}删除结尾处与substring匹配的最长⼦串。与上述命令仅在#和%之间不同。(5)替换⼦串替换⼦串命令都是${...},可以在任意处、开头处、结尾处替换满⾜条件的⼦串。其中的substring都不是正则表达式⽽是通配符。在任意处替换⼦串命令,格式⼀:${string/substring/replacement},仅替换第⼀次与substring相匹配的⼦串。格式⼆:${string//substring/replacement},替换所有与substring相匹配的⼦串。在开头处替换与substring相匹配的⼦串,格式为:${string/#substring/replacement}。在结尾除替换与substring相匹配的⼦串,格式为:${string/%substring/replacement}。三、对⽂件的排序、合并和分割⽂本处理命令包括sort命令、uniq命令、join命令、cut命令、paste命令、split命令、tr命令和tar命令,它们实现对⽂件记录排序、统计、合并、提取、粘贴、分割、过滤、压缩和解压缩等功能,它们与sed和awk构成了Linux⽂本处理的所有命令和⼯具。(1)sort命令sort命令是⼀种对⽂本排序的⼯具,它将输⼊⽂件看做由多条记录组成的数据流,⽽记录由可变宽度的字段组成,以换⾏符作为定界符。sort命令格式:sort [选项] [输⼊⽂件]sort命令默认的域分隔符是空格符,-t选项可⽤于设置分隔符。sort -t: test中-t与":"之间是没有空格的。未指定-t分隔符是空格符,这时记录内开头与结尾的空格都将被忽略,如(空格):root:(空格)则只有⼀个域,-t:指定冒号则这条记录就包含了三个域。sort命令默认是按第1个域进⾏排序的,也可以通过-k选项指定某个域进⾏排序。例如:sort -t: -k3 test。sort命令-n选项可以指定根据数字⼤⼩进⾏排序(不按字母顺序排序)。sort命令-r选项⽤于将排序结果逆向显⽰,如使⽤-n按数字从⼩到⼤排序后,使⽤-r选项将结果逆向显⽰。sort命令-u选项去掉排序结果中的重复⾏。sort命令-o选项加上⽂件名将结果保存到另⼀个⽂件中(sort默认将排序后的结果输出到屏幕上)。sort命令-m选项将两个排好序的⽂件合并成⼀个排好序的⽂件,在⽂件合并前它们必须已经排好序。-m选项对未排序的⽂件合并是没有任何意义的。sort和awk都是分域处理⽂件的⼯具,两者结合起来可以有效地对⽂本块进⾏排序。(2)uniq命令uniq命令⽤于去除⽂本⽂件中的重复⾏,类似sort -u,但uniq命令去除的重复⾏必须是连续重复出现的⾏,中间不能夹杂任何其他⽂本⾏,⽽sort -u命令使所有的重复记录都被去掉。uniq命令有3个选项:uniq -c test,打印每⾏在⽂本中重复出现的次数。(3)join命令join命令⽤于实现两个⽂件中记录的连接操作,将两个⽂件中具有相通域的记录选择出来,再将这些记录所有的域放在⼀⾏(包含来⾃两个⽂件的所有域)。如join -t: ,将和具有共同域的记录连接到⼀起。join命令的结果默认是不显⽰这些未进⾏连接的记录,-a和-v选项⽤于显⽰这些未进⾏连接的记录,-a1和-v1指显⽰⽂件1中未连接的记录,⽽-a2和-v2指显⽰⽂件2中的未连接记录。-a与-v的区别是:-a显⽰以共同域进⾏连接的结果和未进⾏连接的记录,⽽-v则不显⽰以共同域进⾏连接的记录。join命令默认显⽰连接记录在两个⽂件中的所有域,⽽且按顺序。-o选项⽤于改变结果显⽰的格式,可以指定显⽰哪⼏个域、按什么顺序显⽰这些域。例如:join -t: -o1.1 2.2 1.2 ,其中-o1.1 2.2 1.2表⽰显⽰格式依次显⽰第1个⽂件中的第1个域、第2个⽂件中的第2个域、第1个⽂件中的第2个域,结果显⽰三个域。join -t: -i -1 3 -2 1 ,⽂件1的第3个域和⽂件2的第1个域进⾏连接,-i忽略⼤⼩写。join命令在对两个⽂件进⾏连接时,两个⽂件必须都是按照连接域排好序的。(4)cut命令cut命令⽤于从标准输⼊或⽂本⽂件中按域或⾏提取⽂本,cut [选项] ⽂件,cut的选项如下:cut -c1-5 ,提取的第1~5个字符。-c有三种表⽰⽅式:-cn表⽰第n个字符、-cn,m表⽰第n个字符和第m个字符、-cn-m表⽰第n个字符到第m个字符。-c是按字符提取⽂本的,⽆须使⽤-d改变域分隔符,-f按域提取⽂本时就需要使⽤-d设置域分隔符了。-f同样也可以⽤三种⽅式指定域数或域范围。cut可以灵活提取⽂本⽂件中的内容,默认将提取内容放在标准输出上,也可以使⽤⽂件重定向来将内容保存到⽂件。(5)paste命令paste命令⽤于将⽂本⽂件或标准输出中的内容粘贴到新的⽂件,它可以将来⾃不同⽂件的数据粘贴到⼀起,形成新的⽂件。paste命令格式:paste [选项] file1 file2,其选项如下:paste FILE1 FILE2,粘贴FILE1和FILE2,FILE1在前,将FILE1的内容作为每⾏记录的第1域、FILE2的内容作为第2域。可以使⽤-d设置域分隔符paste -d: FILE1 FILE2。paste命令默认是将⼀个⽂件按列粘贴的,-s选项可以实现将⼀个⽂件按⾏粘贴。ls | paste -d" " - - - -,从标准输⼊中读取数据时"-"选项才起作⽤,"-"表⽰读取1次标准输⼊数据即读取到标准输⼊数据中的⼀个域,- - - -每⾏显⽰4个⽂件名。(6)split命令split命令⽤于将⼤⽂件切割成⼩⽂件,split可以按照⽂件的⾏数、字节数切割⽂件,并能在输出的多个⼩⽂件中⾃动加上编号。split命令格式:splite [选项] 待切割的⼤⽂件 输出的⼩⽂件。split -2 ,按2⾏对进⾏切割,每2⾏记录切割成1个⽂件。split命令在后⾯⾃动加上编号以区分不同的⼩⽂件,编号为aa~zz。split -b100 ,-b选项在切割⽂件时仅考虑了⽂件⼤⼩并未考虑记录的完整性。split -C100 ,按100B切割,按-C并不严格按照100B的⼤⼩进⾏切割,⽽是在切割时尽量维持每⾏的完整性。(7)tr命令tr命令实现字符转换功能,类似于sed命令,tr能实现的功能sed命令都可以实现。tr [选项] buffer1 buffer2 < outputfile,其选项有三个,它只能从标准输⼊读取数据。tr -d A-Z < ,删除⽂件中所有的⼤写字母。tr -d "[n]" < ,删除⽂件中所有的换⾏符。tr -s "[n]" < ,将重复出现的换⾏符压缩成⼀个换⾏符。tr命令也可以加上buffer1和buffer2,将buffer1⽤buffer2来替换,tr "[a-z]" "[A-Z]" < ,将中的⼩写字母替换成⼤写字母。(8)tar命令tar命令是linux的归档命令,实现linux系统⽂件的压缩和解压缩。tar [选项] ⽂件名或⽬录名,tar的常⽤选项如下:tar -cf *.txt,将所有的.txt结尾的⽂件放⼊压缩包。-c表⽰创建新的包,-f通常是必选选项。tar -tf ,查看压缩包的内容。-t列出包内容。tar -rf log*,将以log开头的⽂件添加到中,-u选项也可⽤于为包添加新的⽂件,-u选项完全能代替-r选项。解压⾮gzip格式的压缩包:tar -xvf 压缩包名称解压gzip格式的压缩包:tar -zxvf 压缩包名称四、总结(1)字符串处理和⽂本处理命令经常出现在各种shell脚本程序中,应熟练地掌握这些命令。(2)sort、uniq、join、cut、paste、split、tr和tar与grep、sed、awk构成了linux⽂本处理的所有命令和⼯具。(3)该⽂仅其向导,对命令的详细选项功能还须参考相应的⽂档。到此这篇关于shell字符串匹配的实现的⽂章就介绍到这了,更多相关shell字符串匹配内容请搜索脚本之家以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持脚本之家!

发布者:admin,转转请注明出处:http://www.yc00.com/news/1691033634a491472.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信