zoukankan      html  css  js  c++  java
  • bash之字符串处理(核心重点)

    字符串切片

    格式

    ${var:offset:number}
    
    • 取从左侧几个后的几个字符串
    [root@study102 sh]# var=obanm
    [root@study102 sh]# echo ${var:1:3}
    ban
    

    斜杠因为markdown语法需要转义冒号生成

    • 取最右侧的几个字符串
      和从左侧取不一样,这取几个字符。而没有界定位置。冒号和杠之间必须有空格。
    [root@study102 sh]# echo ${var: -3}
    anm
    

    基于模式取字符串

    ${vara#*word}或${vara##*word}
    和
    ${var%*word}或${var%%*word}
    

    从左往右

    ${vara#*word}或${vara##*word}
    

    其中word可以指定任意字符,从左往右,查找变量所存储的字符串中,第一次出现的word。删除字符串开头至第一次出现word字符之间的所有字符。注意:两个#号有区别。是删除的字符串开头至最后一次由word指定的字符之间的所有内容。

    • 案例
      拿掉第一条/及其左边的字串
    [root@study102 sh]# echo $var 
    /dir1/dir2/dir3/my.file.txt
    [root@study102 sh]#  echo ${var#*/}
    dir1/dir2/dir3/my.file.txt
    
    • 案例
      拿掉最后一条/及其左边的字串
    [root@study102 sh]# echo $var 
    /dir1/dir2/dir3/my.file.txt
    [root@study102 sh]#  echo ${var##*/}
    my.file.txt
    

    从右往左

    ${var%*word}或${var%%*word}
    

    其中word可以指定任意字符,从右往左,查找变量所存储的字符串中,第一次出现的word。删除字符串开头至第一次出现word字符之间的所有字符。注意:两个%号有区别。是删除的字符串开头至最后一次由word指定的字符之间的所有内容。

    • 案例
      拿掉最后条/及其右边的字串
    [root@study102 sh]# echo $var
    /dir1/dir2/dir3/my.file.txt
    [root@study102 sh]# echo ${var%/*}
    /dir1/dir2/dir3
    
    • 案例
      掉第一条/及其右边的字串
    [root@study102 sh]# echo $var       
    /dir1/dir2/dir3/my.file.txt
    [root@study102 sh]# echo ${var%%/*}
    

    注意上边的四个案例中的*号代表的匹配到后左或右所有的字符串

    记忆方法

    # 是去掉左边(在键盘上#在$之左边)
    % 是去掉右边(在键盘上%在$之右边)
    单一符号是最小匹配,两个符号是最大匹配。
    

    查找替换

    查找var所表示的字符串中,第一次被pattern所匹配的字符串,以substi替换

    ${var/pattern/substi}
    

    查找var所表示的字符串中,所有能被pattern所有匹配的字符串,以substi替换

    ${var//pattern/substi}
    

    查找var所表示的字符串中,行首能被pattern所匹配的字符串,以substi替换

    ${var/#pattern/substi}
    

    查找var所表示的字符串中,行尾能被pattern所匹配的字符串,以substi替换

    ${var/%pattern/substi}
    

    查找并删除

    查找var中所表示的字符串中,删除第一次被pattern所匹配的字符串。

    ${var/pattern}
    

    查找var中所表示的字符串中。删除所有能被pattern匹配的字符串

    ${var//pattern}
    

    查找var中所表示的字符串中,删除行首能被pattern匹配的字符串。

    ${var/#pattern}
    

    查找var中所表示的字符串中,删除行尾能被pattern匹配的字符串

    ${var/%pattern}
    

    字符大小写替换

    把var中所有的小写字母替换成为大写

    ${var^^}
    
    • 案例
    [root@study102 sh]# echo ${var^^}
    /DIR1/DIR2/DIR3/MY.FILE.TXT
    

    把var中所有的大写字母替换成为小写

    ${var,,}
    
    • 案例
    [root@study102 sh]# var=/DIR1/DIR2/DIR3/MY.FILE.TXT
    [root@study102 sh]# echo ${var,,}
    /dir1/dir2/dir3/my.file.txt
    

    变量赋值变化状态

    赋值状态:
    未设定(unset)、空值(null)、非空值(non-null)

    • 第一种
    ${var-value}和${var:-value}
    

    ${var-value} 如果var没有设定,则使用value作为传回值。(空值及非空值时不做处理)

    ${var:-value} 如果var没有设定或为空值,则使用value作为传回值。(非空值时不做处理)

    • 第二种
    ${var+value}和${var:+value}
    

    ${var+value} 如果var为空值或非空值,则使用value作为传回值。(没设定时不做处理)

    ${var:+value} 如果var为非空值,则使用value作为传回值。(没设定和空值时不做处理)

    • 第三种
    ${var=value}和${var:=value}
    

    ${var=value} 如果var没设定,则使用value作为返回值,同时将$var赋值为value。(空值及非空值时不做处理)

    ${var:=value} 如果var没设定或为空值,则使用value作为回传值,同时将$var赋值为value。(非空值时不做处理)

    • 第四种
    ${var?value}和${var:?value}
    

    ${var?value} 如果var没有设定,则将value输出至STDERR。(空值及非空值时不作处理)

    ${var:?value} 如果var没设定或为空值,则将value输出至STDERR。(非空值时不作处理)

    为脚本文件添加配置文件

    利用字符串的操作功能来完成,在/tmp/下创建hostname文件,文件中声明一个变量HOSTNAME=xiaozhen.com。在创建一个hostname.sh的脚本文件读取该文件。如下:
    文件:

    [root@study102 ~]# cat /tmp/hostname 
    HOSTNAME=xiaozhen.com
    

    脚本:

    [root@study102 sh]# cat hostname.sh 
    #!/bin/bash
    #
    [ -r /tmp/hostname ] && . /tmp/hostname
    HOSTNAME=${HOSTNAME:-aa.com}
    hostname ${HOSTNAME}
    执行结果
    [root@study102 sh]# sh hostname.sh 
    [root@study102 sh]# hostname 
    xiaozhen.com
    

    脚本中如果变量HOSTNAME没有设定或为空值,会使用后边的aa.com赋值给变量。如果是非空值使用本身值。

  • 相关阅读:
    G++与VS2015在变量作用域上的差异性
    SO_REUSEADDR与SO_REUSEPORT平台差异性与测试
    带着SMART原则重新出发
    动态语言的灵活性是把双刃剑 -- 以Python语言为例
    程序员必知的Python陷阱与缺陷列表
    MySQL添加字段和修改字段
    java poi给sheet表格中的某个单元格添加批注
    Maven入门:使用Nexus搭建Maven私服及上传下载jar包
    Linux上两种网络连接方式
    linux创建账户并自动生成主目录和主目录下的文件
  • 原文地址:https://www.cnblogs.com/Liuxz/p/13237403.html
Copyright © 2011-2022 走看看