簡體   English   中英

如何獲得 grep 特定行的匹配項?

[英]How can I get the matches of grep for specific lines?

我有這樣的文件

Category="A" Type="B" randomstring Category="A" Type="C" randomstring 
Category="X" Type="Y" randomstring Category="X" Type="Z" randomstring 

我希望 grep function 返回所有類型的值,但前提是 Category="A"。

它應該只返回 " " 內的值,並且每個值都在一個新行中。

因此,對於給定的示例文件,結果應如下所示:

B
C

我正在嘗試這樣的事情:

grep -Po 'Category="A".*(?<=Type=")[^"']+ filename

結果是:

filename:Category="A" Type="B
filename:Category="A" Type="C

所以我返回了正確的行,但我不知道如何只返回這個字符串的一部分。

使用GNU grep:

grep -Po '(?<=Category="A" Type=").*?(?=")' file

Output:

B
C

您可能會找到一個涵蓋您正在尋找的所有內容的 grep-fu。 但是,它可能過於復雜且難以維護。

只是管道怎么樣,所以第一部分過濾線,第二部分輸出您正在尋找的精確匹配?

grep 'Category="A"' file | grep  -Po '(?<=Type=").' 

表達式grep -Po '(?<=Type=").' 返回在Type=之后出現在雙引號內的單個字符。如果它恰好更長,您可以使用grep -Po '(?<=Type=")[^"]+' ,例如。

是否可以只打印唯一值? 我的文件很大,所以現在我得到了結果:BB C C B....

為此,您可以使用uniq :它顯示唯一值。 但是,由於它是按塊執行的(它的默認行為是報告或省略重復的行),因此您首先需要將所有結果與sort連接起來,以便每個元素只顯示一次:

grep 'Category="A"' file | grep  -Po '(?<=Type=")[^"]+' | sort | uniq

暫無
暫無

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

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