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

问题描述 投票:2回答:4

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

例...

输入字符串=“abc-def-ghi”

字符=“ - ”

期望的输出字符串=“def”

string bash substring character find-occurrences
4个回答
2
投票

可能使用awk与-分隔符

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

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

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


3
投票

我会使用两个参数扩展。

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

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

0
投票

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

str =“abc-def-write”

echo $ str | cut -f 2 -d“ - ”

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

© www.soinside.com 2019 - 2024. All rights reserved.