Linux Shell脚本中如何自由操作字符串(3)

一个简单的getopt命令的模拟, 使用子串提取结构.

例子 9-13. 模拟getopt

1 #!/bin/bash
  2 # getopt-simple.sh
  3 # 作者: Chris Morgan
  4 # 已经经过授权, 可以使用在本书中.
  5
  6
  7 getopt_simple()
  8 {
  9     echo "getopt_simple()"
 10     echo "Parameters are '$*'"
 11     until [ -z "$1" ]
 12     do
 13       echo "Processing parameter of: '$1'"
 14       if [ ${1:0:1} = '/' ]
 15       then
 16           tmp=${1:1}               # 去掉开头的'/' . . .
 17           parameter=${tmp%%=*}     # 提取参数名.
 18           value=${tmp##*=}         # 提取参数值.
 19           echo "Parameter: '$parameter', value: '$value'"
 20           eval $parameter=$value
 21       fi
 22       shift
 23     done
 24 }
 25
 26 # 把所有选项传给函数getopt_simple().
 27 getopt_simple $*
 28
 29 echo "test is '$test'"
 30 echo "test2 is '$test2'"
 31
 32 exit 0
 33
 34 ---
 35
 36 sh getopt_example.sh /test=value1 /test2=value2
 37
 38 Parameters are '/test=value1 /test2=value2'
 39 Processing parameter of: '/test=value1'
 40 Parameter: 'test', value: 'value1'
 41 Processing parameter of: '/test2=value2'
 42 Parameter: 'test2', value: 'value2'
 43 test is 'value1'
 44 test2 is 'value2'
 

--------------------------------------------------------------------------------


子串替换

${string/substring/replacement}
使用$replacement来替换第一个匹配的$substring.

${string//substring/replacement}
使用$replacement来替换所有匹配的$substring.


1 stringZ=abcABC123ABCabc
  2
  3 echo ${stringZ/abc/xyz}           # xyzABC123ABCabc
  4                                   # 使用'xyz'来替换第一个匹配的'abc'.
  5
  6 echo ${stringZ//abc/xyz}          # xyzABC123ABCxyz
  7                                   # 用'xyz'来替换所有匹配的'abc'.
 


${string/#substring/replacement}
如果$substring匹配$string的开头部分, 那么就用$replacement来替换$substring.

${string/%substring/replacement}
如果$substring匹配$string的结尾部分, 那么就用$replacement来替换$substring.


1 stringZ=abcABC123ABCabc
  2
  3 echo ${stringZ/#abc/XYZ}          # XYZABC123ABCabc
  4                                   # 用'XYZ'替换开头的'abc'.
  5
  6 echo ${stringZ/%abc/XYZ}          # abcABC123ABCXYZ
  7                                   # 用'XYZ'替换结尾的'abc'.
 

9.2.1. 使用awk来处理字符串
Bash脚本也可以调用awk的字符串操作功能来代替它自己内建的字符串操作.


--------------------------------------------------------------------------------

例子 9-14. 提取字符串的另一种方法

1 #!/bin/bash
  2 # substring-extraction.sh
  3
  4 String=23skidoo1
  5 #      012345678    Bash
  6 #      123456789    awk
  7 # 注意不同的字符串索引系统:
  8 # Bash的第一个字符是从'0'开始记录的.
  9 # Awk的第一个字符是从'1'开始记录的.
 10
 11 echo ${String:2:4} # 位置 3 (0-1-2), 4 个字符长
 12                                          # skid
 13
 14 # awk中等价于${string:pos:length}的命令是substr(string,pos,length).
 15 echo | awk '
 16 { print substr("'"${String}"'",3,4)      # skid
 17 }
 18 '
 19 #  使用一个空的"echo"通过管道传递给awk一个假的输入,
 20 #+ 这样就不必提供一个文件名给awk.
 21
 22 exit 0

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwswss.html