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

Posted

技术标签:

【中文标题】Bash:从第一次出现字符到第二次出现的子字符串【英文标题】:Bash: substring from first occurrence of a character to the second occurrence 【发布时间】:2018-02-05 21:11:13 【问题描述】:

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

示例...

输入字符串 = "abc-def-ghi"

字符 = "-"

所需的输出字符串 = "def"

【问题讨论】:

【参考方案1】:

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

str="abc-def-ghi"

回显 $str |剪切 -f 2 -d "-"

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

【讨论】:

【参考方案2】:

我会使用两个参数扩展。

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

【讨论】:

【参考方案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

【讨论】:

【参考方案4】:

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

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

-F - 使用什么字段分隔符。

print $2 - 打印第二个位置

【讨论】:

以上是关于Bash:从第一次出现字符到第二次出现的子字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何在Java中将字符串子串到第二个点(。)?

在第 n 次出现字符时剪切字符串

c语言中如何在一个字符串中查找/出现的位置?需要第一次出现和第二次出现中间的内容和第二次出现和第三

截取字符串时,查找某字符第二次出现的位置,怎么查

用于在 javascript 中查找动态字符串中字符的第二次出现的正则表达式

vb一个字符串在另一个字符串中第二次出现的位置?