簡體   English   中英

Bash 打印除開始到結束模式之外的所有行

[英]Bash print all line except start to end pattern

我有這個帶有玩家姓名列表的輸入文件。

Cristiano Ronaldo
Anthony Martial
Jadon Sancho
Marcus Rashford
Bruno Fernandes
Fred
Scott McTominay
Donny Van De Beek
# Start U23 Team
Alvaro Fernandez
Zidane Iqbal
Facundo Pellistri
Hannibal Mejbri
Charlie Savage
# End U23 Team
Harry Maguire
Lisandro Martinez
Alex Telles

我想排除以Start U23 Team開頭並以End U23 Team結尾的行,因此最終結果將是:

Cristiano Ronaldo
Anthony Martial
Jadon Sancho
Marcus Rashford
Bruno Fernandes
Fred
Scott McTominay
Donny Van De Beek
Harry Maguire
Lisandro Martinez
Alex Telles

我可以使用這個命令打印 U23 播放器awk "/# End U23 Team/{f=0} f; /# Start U23 Team/{f=1}" file ,但是反之如何呢?

使用sed中的d命令排除行。

sed '/# Start U23 Team/,/# End U23 Team/d' file
awk "/# Start U23 Team/ {f=1} !f {print} /# End U23 Team/ {f=0}" file
awk '/# Start U23 Team/,/# End U23 Team/{next}1' file

使用sed

$ sed -z 's/# Start.*# End U23 Team\n//' input_file
Cristiano Ronaldo
Anthony Martial
Jadon Sancho
Marcus Rashford
Bruno Fernandes
Fred
Scott McTominay
Donny Van De Beek
Harry Maguire
Lisandro Martinez
Alex Telles

使用 GNU awk ,請嘗試以下代碼,僅使用所示示例編寫和測試。 只需使用RS變量將其設置為正則表達式'(^|\n)# Start U23 Team\n.*\n# End U23 Team\n根據要求,然后在主程序中簡單地打印行。

awk -v RS='(^|\n)# Start U23 Team\n.*\n# End U23 Team\n' '{sub(/\n$/,"")} 1' Input_file

我可以使用這個命令打印 U23 播放器awk "/# End U23 Team/{f=0} f; /# Start U23 Team/{f=1}" file ,但是反之如何呢?

此代碼可能會按照以下方式進行返工

awk 'BEGIN{f=1} /# Start U23 Team/{f=0} f; /# End U23 Team/{f=1}' file

說明: BEGIN模式允許在開始處理行之前執行操作,這里我將f值設置為1/# Start U23 Team//# End U23 Team/交換

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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