字符串处理

  .字符串处理

v bash 的字符串处理工具:

字符串切片:

${#var}: 返回字符串变量var 的长度

例:

[root@lxc ~]# a="     "

[root@lxc ~]# echo ${#a}

5

[root@lxc ~]#

${var:offset}: 返回 字符串变量var 中从第offset 个字符后(不包括第offset个字符)的字符开始,到最后的部分,offset的取值0 到${#var}-1 之间(bash4.2 后,允许为负值)

例:

[root@lxc ~]# a=`echo {a..z} | tr -d " "`

[root@lxc ~]# echo $a

abcdefghijklmnopqrstuvwxyz

[root@lxc ~]# echo ${a:3}

defghijklmnopqrstuvwxyz

[root@lxc ~]#

${var:offset:number} :返回字符串变量var 中从第offset个字符后(不包括第offset个字符)的字符开始长度为number的部分

例:

[root@lxc ~]# echo ${a:3:4}

defg

[root@lxc ~]#

${var: -lengh}:取字符串的最右侧几个字符

注意:冒号后必须有一空白字

例:

[root@lxc ~]# echo ${a: -2}

yz

[root@lxc ~]#

${var:offset: -lengh}:从最左侧跳过offset 字符,一直取到字符串的最右侧lengh个字符之前抛头去尾取中间

例:

[root@localhost ~]# echo ${a:3: -10}

defghijklmnop

[root@localhost ~]#

基于模式取子串:

${var#*word}:其中word可以是指定的任意字符功能:自左而右,查找var 变量所存储的字符串中,第一次出现的word,  删除字符串开头至第一次出现word 字符之间的所有字符

[root@lxc ~]# str=`getent passwd root`

[root@lxc ~]# echo $str

root:x:0:0:root:/root:/bin/bash

[root@lxc ~]# echo ${str#*root}

:x:0:0:root:/root:/bin/bash

${var##*word} :同上,不同的是,删除的是字符串开头至最后一次由word指定的字符之间的所有内容即贪婪模式的删除

[root@lxc ~]# echo ${str##*root}

:/bin/bash

[root@lxc ~]#

${var%word*} :其中word 可以是指定的任意字符;

功能:自右而左,查找var变量所存储的字符串中,第一次出现的word,删除字符串最后一个字符向左至第一次出现word字符之间的所有字符;

例:

[root@lxc ~]# echo ${str%root*}

root:x:0:0:root:/

[root@lxc ~]#

${var%%word*} :同上,只不过删除字符串最右侧的字符向左至最后一次出现word 字符之间的所有字符;

例:

[root@lxc ~]# echo $str

root:x:0:0:root:/root:/bin/bash

[root@lxc ~]# echo ${str%%root*}

 

[root@lxc ~]#

查找替换:

${var/pattern/substi}:查找var 所表示的字符串中,第一次被pattern 所匹配到的字符串,以substi替换之

例:

[root@lxc ~]# echo ${str/root/wang}

wang:x:0:0:root:/root:/bin/bash

${var//pattern/substi}:查找var 所表示的字符串中,所有能被pattern 所匹配到的字符串,以substi 替换之

例:

[root@lxc ~]# echo ${str//root/wang}

wang:x:0:0:wang:/wang:/bin/bash

[root@lxc ~]#

${var/#pattern/substi}:查找var 所表示的字符串中,行首被pattern 所匹配到的字符串,以substi替换之

例:

[root@lxc ~]# echo ${str/#root/suwang}

suwang:x:0:0:root:/root:/bin/bash

[root@lxc ~]#

${var/%pattern/substi}:查找var 所表示的字符串中,行尾被pattern 所匹配到的字符串,以substi 替换之

例:

[root@lxc ~]# echo ${str/%bash/nologin}

root:x:0:0:root:/root:/bin/nologin

[root@lxc ~]#

查找并删除:

${var/pattern} :查找var 所表示的字符串中,删除第一次pattern 所匹配到的字符串

例:

[root@lxc ~]# echo ${str/root}

:x:0:0:root:/root:/bin/bash

[root@lxc ~]#

${var//pattern} :所有

例:

[root@lxc ~]# echo ${str//root}

:x:0:0::/:/bin/bash

[root@lxc ~]#

 

${var/#pattern} :行首

例:

[root@lxc ~]# echo ${str/#root}

:x:0:0:root:/root:/bin/bash

[root@lxc ~]#

${var/%pattern} :行尾

例:

[root@lxc ~]# echo ${str/%bash}

root:x:0:0:root:/root:/bin/

[root@lxc ~]#

字符大小写转换:

${var^^} :把var 中的所有小写字母转换为大写

例:

[root@lxc ~]# echo ${str^^}

ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH

[root@lxc ~]#

${var,,} :把var 中的所有大写字母转换为小写

例:

[root@lxc ~]# echo ${str,,}

root:x:0:0:root:/root:/bin/bash

[root@lxc ~]#

变量赋值

${var:-value} :如果var 为空或未设置,那么返回value ;否则,返回var 的值

例:

[root@lxc ~]# name="wang"

[root@lxc ~]# echo ${name:-"mdzz"}

wang

[root@lxc ~]# name=

[root@lxc ~]# echo ${name:-"mdzz"}

mdzz

[root@lxc ~]#

${var:+value} :如果var 不空,则返回value ,否则返回空值

例:

[root@lxc ~]# name=wang

[root@lxc ~]# echo ${name:+"mdzz"}

mdzz

[root@lxc ~]# name=

[root@lxc ~]# echo ${name:+"mdzz"}

 

[root@lxc ~]#

${var:=value} :如果var 为空或未设置,那么返回value ,并将value 赋值给var ;否则,则返回var 的值

例:

[root@lxc ~]# name=wang

[root@lxc ~]# echo ${name:="mdzz"}

wang

[root@lxc ~]# name=

[root@lxc ~]# echo ${name:="mdzz"}

mdzz

[root@lxc ~]#

${var:?error_info} :如果var为空或未设置 ,那么在当前终端打印error_info;否则返回var的值

例:

[root@lxc ~]# name=

[root@lxc ~]# echo ${name:?"valueisnull"}

-bash: name: valueisnull

[root@lxc ~]# name="wang"

[root@lxc ~]# echo ${name:?"valueisnull"}

wang

[root@lxc ~]#

 

 

原创文章,作者:changge,如若转载,请注明出处:http://www.178linux.com/60643

(0)
changgechangge
上一篇 2016-11-24
下一篇 2016-11-24

相关推荐

  • FTP服务

        FTP是一个非常古老的协议,其主要的作用是用于文件的传输。FTP采用明文的方式传输,极其不安全,但在局域网等环境中使用还是比较方便的。 一、工作原理     FTP的工作方式分为主动模式与被动模式。     1、主动模式 &nbsp…

    Linux干货 2015-07-08
  • 初识正则表达式

    正则表达式是个什么东东? 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE)。在很多文本编辑器里、命令中,通常要使用检索、替换、放行和拒绝那些符合某个模式的文本。而正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码。  摘自《正则表达式之…

    Linux干货 2015-03-27
  • N25—-第三周作业

    1、 列出当前系统上所有已登录用户的用户名。只显示一次    who | cut -d' ' -f1 | sort -u 2、 取出最后登录到当前系统的用户的相关信息。   last | h…

    Linux干货 2016-12-19
  • 马哥教育网络21期+第十一周练习博客(下)

    马哥教育网络21期+第十一周练习博客(下) 3、描述DNS查询过程以及DNS服务器类别。 DNS:Domain Name Service 通俗的称为地址解析,使用TCP和UDP的53端口,是属于应用层的协议; DNS查询有2种方式:     递归查询:至发送一次请求,就能找到最终的结果的查…

    Linux干货 2016-09-26
  • RAID概述

    1、引言 RAID全称Redundant Arrays of Inexpensive Disks / Redundant Arrays of Independent Disks,即独立冗余磁盘阵列。RAID可以通过相关技术(软件/硬件),将多个较小的磁盘整合成为一个较大的磁盘整体,而且能从某些方面提高数据的读写及数据保护。RAID分为不同…

    Linux干货 2016-12-24
  • C++的std::string的“读时也拷贝”技术!

    C++的std::string的读时也拷贝技术! 嘿嘿,你没有看错,我也没有写错,是读时也拷贝技术。什么?我的错,你之前听说写过时才拷贝,嗯,不错的确有这门技术,英文是Copy On Write,简写就是COW,非常’牛’!那么我们就来看看这个’牛’技术的效果吧。 我们先编写一段程序 #include <string> #include…

    Linux干货 2015-04-03