Bash:从字符第一次出现到第二次出现的子串

Bash: substring from first occurrence of a character to the second occurrence

在bash中,如何获取从第一次出现的字符到第二次出现的同一字符的所有内容的子字符串。

示例...

Input String = "abc-def-ghi"

Character = "-"

Desired Output String = "def"

假设您有:

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

可以使用带有 - 定界符的 awk

echo "abc-def-ghi" | awk -F'-' '{print }'

-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

为什么不像这样使用 cut 命令:

str="abc-def-ghi"

echo $str | cut -f 2 -d "-"

,其中 -d 选项是分隔符,-f 选项代表片段号(第一个片段号是 1,而不是数组常见的 0)。