[英]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.