shell中字符串处理方式.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
shell中字符串处理方式 象专业人员那样截断字符串 尽管 basename 和 dirname 是很好的工具,但有时可能需要执行更高级的字符串“截断”,而不只是标准的路径名操作。当需要更强的说服力时,可以利用 bash 内置的变量扩展功能。已经使用了类似于 ${MYVAR} 的标准类型的变量扩展。但是 bash 自身也可以执行一些便利的字符串截断。看一下这些例子: 第一种方法: ${varible##*string} 从左向右截取最后一个string后的字符串 ${varible#*string}从左向右截取第一个string后的字符串 ${varible%%string*}从右向左截取最后一个string后的字符串 ${varible%string*}从右向左截取第一个string后的字符串 *只是一个通配符可以不要 $ MYVAR=foodforthought.jpg $ echo ${MYVAR##*fo} rthought.jpg $ echo ${MYVAR#*fo} odforthought.jpg 在第一个例子中,输入了 ${MYVAR##*fo}。它的确切含义是什么?基本上,在 ${ } 中输入环境变量名称,两个 ##,然后是通配符 (*fo)。然后,bash 取得 MYVAR,找到从字符串 foodforthought.jpg 开始处开始、且匹配通配符 *fo 的最长子字符串,然后将其从字符串的开始处截去。刚开始理解时会有些困难,为了感受一下这个特殊的 ## 选项如何工作,让我们一步步地看看 bash 如何完成这个扩展。首先,它从 foodforthought.jpg 的开始处搜索与 *fo 通配符匹配的子字符串。以下是检查到的子字符串: fo ?? MATCHES *fo foo food foodf ?? foodfo ?? MATCHES *fo foodfor foodfort foodforth foodfortho?? foodforthou foodforthoug foodforthought foodforthought.j foodforthought.jp foodforthought.jpg 在搜索了匹配的字符串之后,可以看到 bash 找到两个匹配。它选择最长的匹配,从初始字符串的开始处除去,然后返回结果。 上面所示的第二个变量扩展形式看起来与第一个相同,但是它只使用一个 # -- 并且 bash 执行几乎同样的过程。它查看与第一个例子相同的子字符串系列,但是 bash 从初始字符串除去最短的匹配,然后返回结果。所以,一查到 fo 子字符串,它就从字符串中除去 fo,然后返回 odforthought.jpg。 这样说可能会令人十分困惑,下面以一简单方式记住这个功能。当搜索最长匹配时,使用##(因为##比#长)。当搜索最短匹配时,使用#。看,不难记吧!等一下,怎样记住应该使用# 字符来从字符串开始部分除去?很简单!注意到了吗:在美国键盘上,shift-4是$,它是bash变量扩展字符。在键盘上,紧靠 $ 左边的是 #。这样,可以看到:# 位于 $ 的“开始处”,因此(根据我们的记忆法),# 从字符串的开始处除去字符。您可能要问:如何从字符串末尾除去字符。如果猜到我们使用美国键盘上紧靠 $ 右边 的字符 (%),那就猜对了。这里有一些简单的例子,解释如何截去字符串的末尾部分: $ MYFOO=chickensoup.tar.gz $ echo ${MYFOO%%.*} chickensoup $ echo ${MYFOO%.*} chickensoup.tar 正如您所见,除了将匹配通配符从字符串末尾除去之外,% 和 %% 变量扩展选项与 # 和 ## 的工作方式相同。请注意:如果要从末尾除去特定子字符串,不必使用 * 字符: MYFOOD=chickensoup $ echo ${MYFOOD%%soup} chicken 在此例中,使用 %% 或 % 并不重要,因为只能有一个匹配。还要记住:如果忘记了应该使用 # 还是 %,则看一下键盘上的 3、4 和 5 键,然后猜出来。 第二种方法:${varible:n1:n2}:截取变量varible从n1到n2之间的字符串。 可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。试着在 bash 中输入以下行: $ EXCLAIM=cowabunga $ echo ${EXCLAIM:0:3} cow $ echo ${EXCLAIM:3:7} abunga 这种形式的字符串截断非常简便,只需用冒号分开来指定起始字符和子字符串长度。 应用字符串截断 现在我们已经学习了所有截断字符串的知识,下面写一个简单短小的

文档评论(0)

精华文档888 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档