Bash

不需要整行,只需要正則表達式的匹配

  • January 19, 2021

我只需要從正則表達式中獲取匹配項:

$ cat myfile.txt | SOMETHING_HERE "/(\w).+/"

輸出只能是括號內匹配的內容。

不要認為我可以使用grep因為它匹配整行。

請讓我知道如何做到這一點。

2件事:

  • 正如@Rory 所說,您需要該-o選項,因此只列印匹配項(而不是整行)
  • 此外,您需要-P選擇使用 Perl 正則表達式,其中包括有用的元素,如Look ahead (?= )Look behind (?<= ),它們查找部分,但實際上並不匹配和列印它們。

如果您只想匹配括號內的部分,請執行以下操作:

grep -oP '(?<=\/\()\w(?=\).+\/)' myfile.txt

如果文件包含 sting /(a)5667/,則 grep 將列印 ‘a’,因為:

  • /(被 找到\/\(,但由於它們處於後視狀態, (?<= )因此未報告
  • a被匹配\w並因此被列印(因為-o
  • )5667/由 找到\).+\/,但由於它們處於前瞻 (?= )中,因此未報告

引用自:https://serverfault.com/questions/51014