1

我对 linux 很陌生,即使我需要一些简单的东西,我也不知道从哪里开始。在 bash 脚本中,我需要解析 HTML 页面中字符串“VOL.”和“”之间的值,并将其传递给变量。

4

2 回答 2

4
newvar=$(grep -oP 'VOL\.\K.*?(?=,)' file.txt)
echo "$newvar"

或从字符串:

newvar=$(grep -oP 'VOL\.\K.*?(?=,)' <<< "$string")
echo "$newvar"

如果您需要更便携的东西:

newvar=$(perl -lne '/VOL\.\K.*?(?=,)/ && print $&' <<< "$string")
echo "$newvar"

正则表达式的解释

  • VOL\.= 文字VOL..= 中的任何字符,regex不带反斜杠
  • \K = 重新开始匹配到零,见https://stackoverflow.com/a/13543042/465183
  • .*??= 任何字符,0 到 N 次出现,但对char 不贪心
  • (?=,)=查找char是一个积极的前瞻性断言,
于 2013-04-20T15:01:53.757 回答
1

这可以使用 bash 的内置正则表达式匹配来完成:

if [[ "$var" =~ "VOL. "([^,]*)"," ]]; then
    match="${BASH_REMATCH[1]}"
fi
于 2013-04-20T17:00:04.453 回答