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

8
在bash中,我如何获取从一个字符的第一次出现到同一字符的第二次出现的所有子字符串。
例如...
输入字符串=“abc-def-ghi” 字符=“-” 期望输出字符串=“def”
4个回答

10
我会使用两个参数扩展。
str="abc-def-ghi"
tmp=${str#*-}  # Remove everything up to and including first -
result=${tmp%%-*} # Remove the first - and everything following it

6
可能需要使用awk和-分隔符。
echo "abc-def-ghi" | awk -F'-' '{print $2}'

-F - 表示要使用的字段分隔符。

{print $2} - 打印第二个位置。


3

假设你拥有:

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

0
为什么不直接使用像这样的cut命令呢:

str="abc-def-ghi"

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

在这里,-d选项是分隔符,-f选项代表片段编号(第一个片段编号为1,而不是数组通常的0)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接