簡體   English   中英

如何在一行中刪除第二個grep匹配?

[英]How to remove second grep match in a single line?

輸入文件1

BRAF      p.Gly464Val  Non-small cell p.Gly464Val   pathogenic
BAG3      p.His83Gln  AllHighlyPenetrant      p.His83Gln     pathogenic 
EYA4      p.Gly277Ser  AllHighlyPenetrant     p.Gly277Ser    pathogenic

myCmd

egrep "p\.[A-Z][a-z]{1,}[0-9]{1,}[A-Z][a-z]{1,}" file1

預期產量

BRAF      p.Gly464Val  Non-small cell  pathogenic
BAG3      p.His83Gln  AllHighlyPenetrant  pathogenic 
EYA4      p.Gly277Ser  AllHighlyPenetrant  pathogenic 

如何刪除第二個grep匹配? 任何建議將不勝感激。
n

如果格式不重要:

awk '{$(NF-1)=""}1' file
BRAF p.Gly464Val Non-small cell  pathogenic
BAG3 p.His83Gln AllHighlyPenetrant  pathogenic
EYA4 p.Gly277Ser AllHighlyPenetrant  pathogenic

假定重復的文本始終總是首先出現在第二個字段中:

$ cat input.txt
BRAF      p.Gly464Val  Non-small cell p.Gly464Val   pathogenic
BAG3      p.His83Gln  AllHighlyPenetrant      p.His83Gln     pathogenic
EYA4      p.Gly277Ser  AllHighlyPenetrant     p.Gly277Ser    pathogenic

$ sed -r 's/^([^ ]* *)([^ ]*)(.*)(\2 *)(.*)/\1\2\3\5/' input.txt
BRAF      p.Gly464Val  Non-small cell pathogenic
BAG3      p.His83Gln  AllHighlyPenetrant      pathogenic
EYA4      p.Gly277Ser  AllHighlyPenetrant     pathogenic

說明:

  1. 第一個括號匹配第一個字段和之后的空格。
  2. 第二括號匹配第二字段。
  3. 第三個括號匹配任何文本,直到再次找到第二個字段。
  4. 然后匹配重復的第二個字段及其后的任何空格。
  5. 匹配最后一個括號中剩余的所有內容。
  6. 最后,將其替換為除重復的第二個字段以外的所有內容。

不管格式如何,以下命令都可以執行此工作。

perl -pe 's/(p\.[A-Z][a-z]{1,}[0-9]{1,}[A-Z][a-z]{1,}.*?)p\.[A-Z][a-z]{1,}[0-9]{1,}[A-Z][a-z]{1,}/\1/' file

perl -pe 's/<regex>/<substitution>/' file將用perl -pe 's/<regex>/<substitution>/' file替換所有出現的<regex> <substitution>

因此,要分解正則表達式:

(p\\.[AZ][az]{1,}[0-9]{1,}[AZ][az]{1,}.*?)捕獲您的模式以及之后的所有內容,直到達到下一個條件。 ? *表示不貪心,因為您希望它第二次在模式匹配時停止。 如果不放? 並且您有第三個匹配項,或之后有多個匹配項,則它將刪除找到的最后一個匹配項,因為*會捕獲所有可能的內容。

p\\.[AZ][az]{1,}[0-9]{1,}[AZ][az]{1,}第二次我們使用您的圖案。 這次我們不捕獲它(no () ),因為我們還是想丟棄它。

遵循此模式的任何內容都不會被匹配,因此不會受到影響。 然后,我們將\\1 (這是第一個捕獲的組)替換為匹配的部分,因此“忘記”了第二個匹配項。

為什么要在grep上使用perl

Grep是圍繞搜索設計的,因此很容易找到模式,但對輸出進行格式設置卻不那么容易。

暫無
暫無

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

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