在bash中,我如何获取从一个字符的第一次出现到同一字符的第二次出现的所有子字符串。
例如...
输入字符串=“abc-def-ghi” 字符=“-” 期望输出字符串=“def”
例如...
输入字符串=“abc-def-ghi” 字符=“-” 期望输出字符串=“def”
str="abc-def-ghi"
tmp=${str#*-} # Remove everything up to and including first -
result=${tmp%%-*} # Remove the first - and everything following it
-
分隔符。echo "abc-def-ghi" | awk -F'-' '{print $2}'
-F - 表示要使用的字段分隔符。
{print $2} - 打印第二个位置。
假设你拥有:
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
在这里,-d选项是分隔符,-f选项代表片段编号(第一个片段编号为1,而不是数组通常的0)。str="abc-def-ghi"
echo $str | cut -f 2 -d "-"