我有getFirstName()
个文件,想要在bash脚本中解析它以获取最新的(最顶层的)更改列表:
String
预期产出:
changes.html
如何在bash脚本中执行此操作?
我一直在尝试使用bash regexp,但我确实做错了什么
. . .
<h1> Changes </h1>
<h2>
<a href="3/changes">#3</a>
</h2>
<ol>
<li>Recent Text line 1</li>
<li>Recent Text line 2</li>
</ol>
<h2>
<a href="2/changes">#2</a>
</h2>
<ol>
<li>Text line 1</li>
<li>Text line 2</li>
<li>Text line 3</li>
</ol>
<h2>
<a href="1/changes">#1</a>
</h2>
<ol>
<li>Text line 1</li>
<li>Text line 2</li>
</ol>
. . .
以上脚本仅返回:
Recent Text line 1
Recent Text line 2
如果我删除regexp(changes_regex='(<ol><li>.*</li></ol>)?'
changes_list=$(< ~/Documents/outfile.html)
if [[ $changes_list =~ $changes_regex ]]; then
echo 'match'
n=${#BASH_REMATCH[*]}
while [[ $i -lt $n ]]; do
echo " capture[$i]: ${BASH_REMATCH[$i]}"
let i++
done
else
echo 'no match'
fi
)中的括号,我会得到贪婪的匹配。
如何正确构建正则表达式以便只获取第一个列表内容?
答案 0 :(得分:1)
sed -n '/<ol>/,/<\/ol>/p; /<\/ol>/q' changes.html | sed -r 's/<li>(.*)<\/li>/\1/g;s/<.*//g'
输出(第6行,第7行):
Recent Text line 1
Recent Text line 2
我理解你了吗?
答案 1 :(得分:1)
使用xmllint和XPath来解析html
xmllint --html --xpath '//h2[a[@href="3/changes"]]/following-sibling::ol[1]/li' first.html | sed -re 's/<li>([a-zA-Z0-9 ]+)<\/li>/\1\n/g'
Recent Text line 1
Recent Text line 2