使用 expr 和正则表达式提取 linux 中的子字符串

Extracting substring in linux using expr and regex

所以我才刚刚开始学习正则表达式。我必须在一个大字符串中提取一个子字符串。

我的字符串基本上是包含很多东西的一大行。我已经确定了我需要提取的模式。我需要这一行的数字 A lot of stuff<li>65,435 views</li>a lot of stuff 这个数字只是为了举例。

这整个字符串实际上是一大行,我的文件 views.txt 包含很多这样的行。

所以我尝试了这个,

while read p
do
y=`expr "$p": ".*<li>\(.*\) views "`
echo $y
done < views.txt

我希望遍历此 views.txt 文件中的所有此类行并打印出数字。

我收到语法错误。我真的不知道这里出了什么问题。我相信我已经正确地将 <li>views 放在数字的两侧,包括空格。

我对上述正则表达式的(有限的)解释使我相信它会输出数字。

感谢任何帮助。

语法错误是因为“:”与“$p”之间没有用 space(或制表符)分隔。修复后,正则表达式有一个尾随空白,这将阻止它匹配。解决这两个问题后,您的示例脚本将按预期工作。