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



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

例。。。

输入字符串 = "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

可能将 awk 与-分隔符一起使用

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

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

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

假设你有:

s="abc-def-ghi"
ch='-'

使用内置的 BASHread

IFS="$ch" read -ra arr <<< $s && echo "${arr[1]}"

或者,使用 BASH 正则表达式:

re="$ch([^$ch]*)$ch"
[[ $s =~ -([^-]*)- ]] && echo "${BASH_REMATCH[1]}"

输出:

def

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

str="abc-def-ghi">

回声$str | 切 -f 2 -d "-">

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

最新更新