在我的 yaml 檔案中,我想在匹配模式后使用 Sed 洗掉一個塊。
例子:
Keypages:
- name: Key pages
LaunchPad:
- name: "\U0001F680Launch Pad"
- location: US
Microservices:
- name: 'Micro services '
在這個例子中,當在一行的開頭匹配LaunchPad(例如)時,我想洗掉它作為它的塊(對我來說,以-開頭的行,然后在找不到-時停止)
結果 :
Keypages:
- name: Key pages
Microservices:
- name: 'Micro services '
謝謝你
uj5u.com熱心網友回復:
使用這個 Perl 單行:
perl -i.bak -ne 'print unless m{^LaunchPad} .. !m{^\s*-}' in_file
Perl 單行器使用這些命令列標志:
-e:告訴 Perl 查找行內代碼,而不是在檔案中。
-n:一次回圈輸入一行,$_默認情況下將其分配給。
-i.bak:就地編輯輸入檔案(覆寫輸入檔案)。在覆寫之前,通過在其名稱后附加擴展名來保存原始檔案的備份副本.bak。
EXPR1 .. EXPR2:這在運算式 EXPR1 為真和運算式EXPR2為真(含)之間為真。
!m{^\s*-}:不匹配行以 0 個或多個空格字符后跟破折號的模式。
還請參見
perldoc perlrun::如何執行 Perl 解釋器:命令列開關
perldoc perlre:Perl 正則運算式(正則運算式)
perldoc perlre:Perl 正則運算式(正則運算式):量詞;字符類和其他特殊轉義;斷言;捕獲組
perldoc perlrequick:Perl 正則運算式快速入門
uj5u.com熱心網友回復:
使用 python PyYaml 庫,您可以使用以下腳本作為過濾器,洗掉任何名為的部分LaunchPad:
import sys, yaml
data = yaml.safe_load(sys.stdin)
del data['LaunchPad']
yaml.dump(data, sys.stdout)
只需運行:python above-script < input.yml > output.yml
鑒于此輸入:
Keypages:
- name: Key pages
LaunchPad:
- name: "\U0001F680Launch Pad"
- location: US
Microservices:
- name: 'Micro services '
上面的腳本產生這個輸出:
Keypages:
- {name: Key pages}
Microservices:
- {name: 'Micro services '}
uj5u.com熱心網友回復:
使用sed
$ sed '/^LaunchPad/,/^[[:alpha:]]/{/^LaunchPad/!{/^-/d};/^LaunchPad/d}' input_file
Keypages:
- name: Key pages
Microservices:
- name: 'Micro services '
/^LaunchPad/,/^[[:alpha:]]/- 匹配LaunchPad以任何字母字符開頭的下一行開頭的行/^LaunchPad/!- 忽略以開頭的行LaunchPad/^-/d- 匹配以破折號開頭的行然后洗掉它們/^LaunchPad/- 最后,洗掉以LaunchPad
uj5u.com熱心網友回復:
這可能對您有用(GNU sed):
sed -n '/^LaunchPad:/{:a;n;/^-/ba};p' file
關閉隱式列印-n。
匹配一個開頭的行LaunchPad:,然后獲取以下以 . 開頭的行-。
列印所有其他行。
選擇:
sed '/LaunchPad:/{:a;N;/^-/Ms/\n//;ta;D}' file
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/491435.html
上一篇:bash中的$符號是什么意思?
