[英]How to find and print all parameters in files?
我有多個帶有定義參數的文本文件。 參數將采用{{env.parameter_name}}的形式。 我需要使用bash腳本對它們進行跟蹤。
最好的方法是什么?
我的輸入文件如下所示
<?xml version="1.0" encoding="UTF-8"?>
<config>
<host value="{{env.host}}" />
<port value="{{env.port}}" />
</config>
我希望我的輸出像這樣
{{env.host}}
{{env.port}}
使用xmlstarlet:
xmlstarlet select --template --value-of '//@value' file.xml
或從file.xml獲取所有屬性:
xmlstarlet select --template --value-of '//@*' file.xml
在這種情況下,兩種情況下的輸出:
{{env.host}} {{env.port}}
請參閱: xmlstarlet select --help
跟隨awk可能會對您有所幫助,因為您沒有顯示任何示例Input_file,所以也沒有測試它,請嘗試一下並讓我知道。
awk 'FNR==1{if(val){print RS "*******";close(val)};print "*******" RS FILENAME;val=FILENAME;} /{{.*}}/' *.txt
它應該打印文件名,然后打印所有參數,例如->
*******
file1.txt
{{env.parameter_name}}
{{env.other_name}}
*******
*******
file2.txt
{{test_name}}
*******
編輯:由於OP僅需要打印參數,因此以下內容可能會有所幫助。
awk 'FNR==1{if(val){close(val)};val=FILENAME;} /{{.*}}/{match($0,/{{.*}}/);print substr($0,RSTART,RLENGTH)}' *.txt
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}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.