gpt4 book ai didi

string - 使用 bash/cut/split 提取字符串的一部分

转载 作者:行者123 更新时间:2023-11-29 08:38:53 26 4
gpt4 key购买 nike

我有这样一个字符串:

/var/cpanel/users/joebloggs:DNS9=domain.example

我需要从此字符串中提取用户名 (joebloggs) 并将其存储在变量中。

除了 joebloggsdomain.example 之外,字符串的格式始终相同,所以我认为可以使用 cut 将字符串拆分两次?

第一个拆分将按 : 进行拆分,我们会将第一部分存储在一个变量中以传递给第二个拆分函数。

第二次拆分将按 / 拆分并将最后一个单词 (joebloggs) 存储到一个变量中

我知道如何在 PHP 中使用数组和拆分来执行此操作,但我对 bash 有点迷茫。

最佳答案

要在 bash 中使用参数扩展从这个字符串中提取 joebloggs 而无需任何额外的过程...

MYVAR="/var/cpanel/users/joebloggs:DNS9=domain.example"

NAME=${MYVAR%:*} # retain the part before the colon
NAME=${NAME##*/} # retain the part after the last slash
echo $NAME

不依赖于 joebloggs 处于路径中的特定深度。


总结

几种参数扩展方式的概述,供引用...

${MYVAR#pattern}     # delete shortest match of pattern from the beginning
${MYVAR##pattern} # delete longest match of pattern from the beginning
${MYVAR%pattern} # delete shortest match of pattern from the end
${MYVAR%%pattern} # delete longest match of pattern from the end

所以 # 表示从头匹配(想想注释行),% 表示从末尾匹配。一个实例表示最短,两个实例表示最长。

您可以使用数字根据位置获取子字符串:

${MYVAR:3}   # Remove the first three chars (leaving 4..end)
${MYVAR::3} # Return the first three characters
${MYVAR:3:5} # The next five characters after removing the first 3 (chars 4-9)

您还可以使用以下方法替换特定的字符串或模式:

${MYVAR/search/replace}

pattern 与文件名匹配的格式相同,因此 *(任何字符)很常见,通常后跟特定符号,如 /

示例:

给定一个变量

MYVAR="users/joebloggs/domain.example"

删除路径留下文件名(所有字符到斜线):

echo ${MYVAR##*/}
domain.example

去掉文件名,保留路径(删除最后一个/之后的最短匹配):

echo ${MYVAR%/*}
users/joebloggs

仅获取文件扩展名(删除最后一个句点之前的所有内容):

echo ${MYVAR##*.}
example

注意:要执行两个操作,您不能将它们组合起来,而必须分配给一个中间变量。所以要获取没有路径或扩展名的文件名:

NAME=${MYVAR##*/}      # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain

关于string - 使用 bash/cut/split 提取字符串的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19482123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com