Bash 脚本解析与空格字符一致的文本时出现问题

Bash 脚本解析与空格字符一致的文本时出现问题

我有一个用于审核的命令列表,类似于:

1. -a *policy name=PolicyName -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S
2. -a *policy name=PolicyName -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S
3. -a *policy name=Policy Name -a *policy workflow name=PolicyWorkflow -a *policy action name=PolicyAction -s Server -b Storage -J Node -y 1 Months -o -F -S

我正在尝试将每个name=Value变量设置为。由于这是标准模式,我成功地使用了 read,但是当我到达带有空格的行(参见第 3 行)时,它会偏移我的所有变量。我不确定如何在不循环遍历行中的每个单词并匹配特定模式的情况下解决这个问题。希望有人能有更好的解决方案。

答案1

bash并使用数组变量时,您可以执行以下操作:

{ IFS=$'\n'; array=($(grep -Po 'name=[^-]+(?=\s*-)' infile)); }

然后打印数组的元素(bash中的数组索引从0开始):

printf '%s\n' "${array[@]}"
name=PolicyName
name=PolicyWorkflow
name=PolicyAction
name=PolicyName
name=PolicyWorkflow
name=PolicyAction
name=Policy Name
name=PolicyWorkflow
name=PolicyAction

或者只打印单个元素:

printf '%s\n' "${array[6]}"
name=Policy Name
  • 我们定义IFS到“ \newline”字符IFS=$'\n',以便单词拆分\n仅在结果上发生在“ ewline”字符上未引用的命令替换$(...)

  • 语法是已知的{ list; }分组命令我只是习惯对我的命令进行分组。

  • array=(...)语法用于创建关联的大批变量名为array.

  • 使用grep -Po 'name=[^-]+(?=\s*-)' infile,我们-o只打印与模式匹配的匹配项"name="后跟任何非零长度的字符,但连字符[^-]+后跟零个或多个空格,直到连字符(?=\s*-)


未来阅读:

相关内容