字符串处理

  .字符串处理

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

相关推荐

  • 用户和组的管理

    通过命令、passwd和shadow的格式,讲述了用户和组的管理

    Linux干货 2017-12-17
  • 《种一棵树最好的时间,是十年前,其次是现在。》

    选择一个处于不断发展中的行业,学习新知识就如逆水行舟,不能停止。

    Linux干货 2018-03-26
  • 文本查找与文件查找

    咬文嚼字,颠倒糊涂,善哉!善哉? 念头通达,思虑有感,言简明,意通神 文件是什么?文本是什么?文本文件是什么?      好想来碗正常的豆腐脑,可惜每天早上也只能是豆腐花。吃不到,想想还是可以的,豆腐脑是“文件”,吃豆腐脑是“看文本”,找到地,点了豆腐脑,就是“查找文件”,符合个人口味的,加盐,加咸菜,加黄豆…

    2017-06-04
  • Linux不同发行版之间的联系与区别

    Linux发行版有商业版、社区版两类。两者的共同点都是GNU/Linux发行版,区别在于商业版是由商业公司维护,社区版是社区组织维护。由于linux发行版都要遵循GPL协定,任何人都有使用、共享、修改软件源代码的自由,所以商业版的收入主要来自向企业提供支持服务,它的软件基本都是免费的。

    Linux干货 2018-03-04
  • 探索处理文本工具“sed”的相关奥妙

    一:sed工具 1,set的介绍:sed是一种流编辑器,它一次处理一行内容。处理时,把当前 处理的行存储在临时缓冲区中,称为“模式空间”(patternspace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断…

    2017-08-26
  • 五.Linux博客-2016年7月28日索引、硬链接、软连接、inode表、file、重定向、tr、管道、用户、组

    格式说明: 操作 概念 命令 说明及举例 五.索引、硬链接、软连接、inode表、file、重定向、tr、管道、用户、组 索引节点 原数据保存在inode table表中每个文件或目录都有一个独立的inode number(节点编号在一个分区中是唯一的,每个分区都有自己的inode table) ls -i 查看节点编号 硬链接 ln&n…

    Linux干货 2016-08-23