在bash中,如何获取从第一次出现的字符到第二次出现的同一字符的所有内容的子字符串。
例...
输入字符串=“abc-def-ghi”
字符=“ - ”
期望的输出字符串=“def”
可能使用awk与-
分隔符
echo "abc-def-ghi" | awk -F'-' '{print $2}'
-F - 要使用的字段分隔符。
{print $ 2} - 打印第二个位置
我会使用两个参数扩展。
str="abc-def-ghi"
tmp=${str#*-} # Remove everything up to and including first -
result=${tmp%%-*} # Remove the first - and everything following it
假设你有:
s="abc-def-ghi"
ch='-'
使用BASH read
内置:
IFS="$ch" read -ra arr <<< $s && echo "${arr[1]}"
或者,使用BASH正则表达式:
re="$ch([^$ch]*)$ch"
[[ $s =~ -([^-]*)- ]] && echo "${BASH_REMATCH[1]}"
输出:
def
为什么不像这样使用cut命令:
str =“abc-def-write”
echo $ str | cut -f 2 -d“ - ”
,其中-d选项是分隔符,-f选项代表片段编号(第一个片段编号为1,而不是0,因为它通常用于数组)。