【发布时间】:2018-02-05 21:11:13
【问题描述】:
在 bash 中,如何获取从第一次出现的字符到第二次出现相同字符的所有内容的子字符串。
示例...
输入字符串 = "abc-def-ghi"
字符 = "-"
所需的输出字符串 = "def"
【问题讨论】:
标签: string bash substring character find-occurrences
在 bash 中,如何获取从第一次出现的字符到第二次出现相同字符的所有内容的子字符串。
示例...
输入字符串 = "abc-def-ghi"
字符 = "-"
所需的输出字符串 = "def"
【问题讨论】:
标签: string bash substring character find-occurrences
为什么不直接使用 cut 命令:
str="abc-def-ghi"
回显 $str |剪切 -f 2 -d "-"
,其中 -d 选项是分隔符,-f 选项代表片段编号(第一个片段编号为 1,而不是数组常见的 0)。
【讨论】:
我会使用两个参数扩展。
str="abc-def-ghi"
tmp=${str#*-} # Remove everything up to and including first -
result=${tmp%%-*} # Remove the first - and everything following it
【讨论】:
假设你有:
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
【讨论】:
可以将 awk 与 - 分隔符一起使用
echo "abc-def-ghi" | awk -F'-' '{print $2}'
-F - 使用什么字段分隔符。
{print $2} - 打印第二个位置
【讨论】: