【发布时间】:2022-11-11 21:11:46
【问题描述】:
我正在尝试在 shell 脚本中使用 regex 和 BASH_REMATCH 获取每个字符串的第一个字符。
我的输入文本文件包含:
config_text = STACK OVER FLOW
弦乐堆 超过 流动必须是这样的大写。
我的输出应该是这样的:
SOF
我现在的代码是:
var = config_text
values=$(grep $var test_file.txt | tr -s ' ' '\n' | cut -c 1)
if [[ $values =~ [=(.*)]]; then
echo $values
fi
如您所见,我正在使用tr和切但我只想替换它们BASH_REMATCH因为这两个命令已在许多链接中报告为在 MacO 上不起作用。
我试过这样的事情:
var = config_text
values=$(grep $var test_file.txt)
if [[ $values =~ [=(.*)(\b[a-zA-Z])]]; then
echo $values
fi
我解释的价值应该是:
S O F
但似乎 \b 不适用于 shell 脚本。 任何人都知道如何获得我想要的输出BASH_REMATCH只要。 提前感谢您的帮助。
【问题讨论】:
-
如果您必须使用 regex 和 BASH_REMATCH,也许可以尝试 this 一次提取一个字符串,但是对于所有需要的努力来说,将行拆分为数组并在
=之后迭代所有内容不仅更容易? -
如果您有
var='config_text = STACK OVER FLOW',那么您可以使用read -ra myarray <<< "$var"创建一个数组,然后您将拥有数组元素2+ 中的所有单词,以便根据需要进行迭代和处理。