我有一堆文件,其中使用了模板标签。我想列出所有文件中使用的所有不同模板标签。
这是我用过的bash脚本,没有匹配项...
for f in EHS/*.html; do
value=`cat ${f}`;
[[ $value =~ "({%.*?%})" ]]
if [[ ${BASH_REMATCH[0]} ]]; then
echo "Found: ${BASH_REMATCH[0]}";
fi
done;
这是其中一个html文件的摘录:
<p>
The ordernumber is: {%OrderNumber%}<br>
The partnumer is: {%PartNumber%}
</p>
所以我的目标是只返回使用的所有不同标签...
答案 0 :(得分:3)
两个问题:
该正则表达式应该不加引号,但是{}
需要转义,因为它们的含义很特殊。
bash不支持像*?
这样的节俭量词。
使用grep更容易:
grep -o '{%[^}]*%}'
-o
选项仅返回匹配的部分,每行一个。
请注意,{%ab%cd}ef%}
之类的字符串不匹配,因为没有简单的方法来防止标准grep中多字符定界符的出现。使用pgrep,您可以使用
grep -o -P '{%.*?%}'
与您最初的意图一样。