从字符串中提取文本并存储在变量中

chm*_*hmk 0 linux bash

我有一个像 的字符串/feature/abc-1245_branch_name,我想从字符串中提取 abc-1245 并将其存储到不同的变量中。

我尝试使用 sed 但效果不佳。

jes*_*e_b 5

使用awk(取决于输入字符串的变化程度):

awk -F[_/] '{print $3}' <<<"$string"
Run Code Online (Sandbox Code Playgroud)

如果您希望能够处理更复杂的目录结构,您可以首先使用基本名称

basename "$string" | awk -F_ '{print $1}'
Run Code Online (Sandbox Code Playgroud)

要存储在变量中,请使用命令替换

variable=$(awk -F[_/] '{print $3}' <<<"$string")
Run Code Online (Sandbox Code Playgroud)


Kus*_*nda 5

string=/feature/abc-1245_branch_name

different_variable=${string%%_*}
different_variable=${different_variable##*/}

printf '%s\n' "$different_variable"
Run Code Online (Sandbox Code Playgroud)

这使用标准参数替换首先删除第一个下划线之后的位,然后是最后一个斜杠之前的位。

  • ${variable%%pattern}去除最长子串匹配pattern$variable
  • ${variable##pattern}删除最长的子串匹配pattern开始$variable

如果你知道_branch_name实际上是什么,

string=/feature/abc-1245_branch_name

different_variable=$( basename "$string" '_branch_name' )

printf '%s\n' "$different_variable"
Run Code Online (Sandbox Code Playgroud)

这将字符串视为路径名(即使它可能不是实际路径名),并用于basename获取最后一个路径组件(即“文件名”)。该basename实用程序还能够删除文件名后缀,因此我们使用它来删除已知字符串_branch_name