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:从第一次出现字符到第二次出现的子字符串的主要内容,如果未能解决你的问题,请参考以下文章
c语言中如何在一个字符串中查找/出现的位置?需要第一次出现和第二次出现中间的内容和第二次出现和第三