在bash中解析两个字符串之间的值

时间:2013-04-20 14:58:32

标签: linux bash curl sed grep

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

2 个答案:

答案 0 :(得分: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次出现但非贪心?字符
  • (?=,) =这是一个正向前瞻断言来查找,字符

答案 1 :(得分:1)

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

if [[ "$var" =~ "VOL. "([^,]*)"," ]]; then
    match="${BASH_REMATCH[1]}"
fi