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

问题描述:

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

实施例...

输入字符串= “ABC-DEF-GHI”

字符= “ - ”

希望的输出String = “DEF”

可能用awk与-分隔符

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

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

{打印$ 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 

我会用两个参数扩展。

str="abc-def-ghi" 
tmp=${str#*-} # Remove everything up to and including first - 
result=${tmp%%-*} # Remove the first - and everything following it 

为什么不直接使用削减命令是这样的:

海峡= “ABC-DEF-GHI”

回声$海峡|切-f 2 -d“ - ”

,其中-d选项是分隔符和-f选项表示片段数(第一个片段号为1,不为0,因为它是为数组常见)。