簡體   English   中英

如何查找和打印文件中的所有參數?

[英]How to find and print all parameters in files?

我有多個帶有定義參數的文本文件。 參數將采用{{env.parameter_name}}的形式。 我需要使用bash腳本對它們進行跟蹤。

  1. 在文件中查找所有參數。
  2. 打印參數名稱。

最好的方法是什么?

我的輸入文件如下所示

<?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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM