awk 'match($0,/\{{.*\}}/){print substr($0,RSTART,RLENGTH)}' infile
测试结果:
$ cat infile
<?xml version="1.0" encoding="UTF-8"?>
<config>
<host value="{{env.host}}" />
<port value="{{env.port}}" />
</config>
$ awk 'match($0,/\{{.*\}}/){print substr($0,RSTART,RLENGTH)}' infile
{{env.host}}
{{env.port}}
使用grep:
$ grep -Po '({{(?>([^}}])|(?0))*?}})' file
{{env.host}}
{{env.port}}
在情况下,如果你有一个像下面多个值,
$ cat file
<?xml version="1.0" encoding="UTF-8"?>
<config>
<host value="{{env.host}}" />
<port value="{{env.port}}{{env.etc}}" />
</config>
$ grep -Po '({{(?>([^}}])|(?0))*?}})' file
{{env.host}}
{{env.port}}
{{env.etc}}
最好的使用'egrep'命令与正则表达式类似'egrep“{{env \ .. *?}}”fileName.txt' – SMA
@SMA egrep不知道非贪婪匹配,这是一个PCRE构造。 –
使用适当的XML分析器代替文本处理工具,比如'Awk'或'sed',你可以安装'xmllint'吗? – Inian