【发布时间】:2013-04-13 20:34:11
【问题描述】:
我对 linux 很陌生,即使我需要一些简单的东西,我也不知道从哪里开始。在 bash 脚本中,我需要解析 HTML 页面中字符串“VOL.”和“”之间的值,并将其传递给变量。
【问题讨论】:
我对 linux 很陌生,即使我需要一些简单的东西,我也不知道从哪里开始。在 bash 脚本中,我需要解析 HTML 页面中字符串“VOL.”和“”之间的值,并将其传递给变量。
【问题讨论】:
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 是一个积极的前瞻性断言
【讨论】:
-P 是一个 gnu 标志,在大多数非 Linux 系统上不可用,例如Mac 和其他 BSD。
linux 标签 ;)
perl 解决方案。
这可以使用 bash 的内置正则表达式匹配来完成:
if [[ "$var" =~ "VOL. "([^,]*)"," ]]; then
match="${BASH_REMATCH[1]}"
fi
【讨论】: