写程式时经常需要截取字串中的一小部份, 很多程式语言都有类似 substr 等函式。在 Shell Script 虽然没有 substr() 或 substring() 的函式, 但要实现也很方便, 以下会介绍两种 Shell Script 下截取部份字串的方法。
${string:S:N} 写法
在 Shell Script 抽取字串, 最简单的方法是这样:
|
1 2 3 4 5 |
#!/bin/sh string="This is a testing" echo ${string:3} echo ${string:3:9} |
上面 Shell Script 执行结果是
s is a testing
s is a te
上面程式码第 4 行的 3, 代表开始头 3 个字符不要, 一直截取到字串结尾; 而第 5 行的 3:9 代表开始头 3 个字符不要, 抽取 9 个字符。
cut 指令
上面的方法只可以在 Shell Script 使用, 如果透过 cut 指令, 不论是指令模式或者 Shell Script 也适用, 例如:
$ echo “This is a testing” | cut -c1-11
以上指令会回传 “This is a t”, 其中 “This is a testing” 是原来完整的字串, “c1-11” 代表截取第 1 个字符至第 11 个字符.
除了指定要截取的字串外, 也可以用 -d 及 -f 参数, 以指令字符分割原来字串, 例如我想用空格分割 “This is a testing”, 并抽取其中第 4 组字串, 可以这样做:
$ echo “This is a testing” | cut -d” ” -f 4
这样会回传 “testing”, 如果想要抽取第 1 组字串, 可以改成这样:
$ echo “This is a testing” | cut -d” ” -f 1
这样就会回传 “This”.
如果在 Shell Script 下, 要将 cut 指令截取的字串放到变量, 可以这样写:
|
1 2 3 4 5 |
#!/bin/sh string="This is a testing" substr=$(echo $string | cut -d" " -f 4) echo $substr |
上面 Shell Script 执行结果是 “testing”.