字符串处理

  .字符串处理

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 15:19
下一篇 2016-11-24 16:49

相关推荐

  • 通过webGUI显示日志信息

         日志信息通常对于我们维护人员有着极为重要的意义,能够为我们提供故障排查、运维监控、历史操作记录等等很多必要的信息。为了方便此类信息的获取,我们可以搭建日志服务器,并实现webGUI显示以便更直观形象的观察收集它们。     一、拓扑图         &nbs…

    Linux干货 2015-07-15
  • http协议简介

        http:Hyper Text Transfer Protocol,超文本传输协议。是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hyp…

    Linux干货 2015-11-18
  • N25第三周总结

    linux   bassic The third week of blogging 1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。  ~]# who | cut -d' ' -f1 | uniqr…

    Linux干货 2016-12-17
  • linux中扩展swap分区和移动设备使用挂载以及常用的工具free、df 、du、dd命令

    swap分区 swap分区作用:内存不足时充当系统内存,所以swap尽量放在告诉硬盘上也就是尽量使用磁盘的第一个分区 动手创建swap分区       1、创建分区,将分区类型转换成swap分区格式           &nbsp…

    Linux干货 2016-08-29
  • 马哥教育网络班22期+第1周课程练习

    第1周课程练习 一、描述计算机的组成及其功能。     CPU (运算器+控制器), 存诸器(内存与外部存储),输入输出设备。      运算器:对数据进行处理(包括算述运算与逻辑运算)。      控制器:负责从存储器取出指令,按指令的要求发出控制信号,使各…

    Linux干货 2016-08-15
  • Linux基础知识(五)-文件查找命令find

    对grep 和 find 命令的操作 1、显示当前系统上root、fedora或user1用户的默认shell; 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); 3、使用echo命令输出一个路径,使用grep取出其基名; 4、找出ifconfig命令结果中的1-255之间数字; 5、写一个…

    Linux干货 2016-10-24