说我有...... 字符串= '第一/第二/第三'
如何仅使用纯bash(不是awk / sed等)和1行中的字符串中提取“秒”?
我知道我可以用$ {string#* /}获得'第二/第三'但是只是'第二'
谢谢!
答案 0 :(得分:5)
你可以这样做:
#!/bin/env bash
STRING="first/second/third"
TEXT=$STRING
TEXT=${TEXT#*/}
TEXT=${TEXT%/*}
echo $TEXT
Bash也支持regex
。这在这里很有用,以及其他需求更复杂的地方。对于您的用例,您可以轻松匹配每个部分,并将其解压缩。
#!/bin/env bash
STRING="first/second/third"
[[ $STRING =~ ^([^/]*)/([^/]*)/([^/]*)$ ]] && echo matched
echo [1] ${BASH_REMATCH[1]}
echo [2] ${BASH_REMATCH[2]}
echo [3] ${BASH_REMATCH[3]}
答案 1 :(得分:3)
一个选项:
second="$string" ; second="${second#*/}" ; second="${second%/*}"
# now "$second" is 'second'
另一种选择:
IFS=/ read -r first second third <<< "$string"
# now "$first" is 'first', "$second" is 'second', and "$third" is 'third'
答案 2 :(得分:2)
一种方法是使用IFS
和read
:
string='first/second/third'
IFS='/' read -r a b c <<< "${string}" && echo ${b}
打印“秒”。
答案 3 :(得分:2)
使用bash数组:
string='first/second/third'
你可以这样做:
IFS=/ read -ra arr <<< "$string" && echo "${arr[1]}"
或使用基于IFS
的拆分:
(IFS=/ arr=($string) && echo "${arr[1]}")
两个命令都会打印出来:
second