簡體   English   中英

使用Grep和Regex生成一個文本文件,列出其中包含特定字符串的所有文件

[英]Using Grep and Regex to generate a text file which lists all files that have specific strings in them

我無法為Grep和Regex找出一個非常具體的用例。 我搜索了很多,似乎找不到答案。

我想從一個根目錄中遞歸運行Grep,該目錄包含數百個不同程序的目錄。 我希望輸出打印到文本文件並列出與某些正則表達式匹配的所有文件的文件名。 具體來說,這就是我需要用英語做的事情:

找到包含文本[stringA] AND [“stringB”]或['stringB']的所有文件,並將每個文件的文件路徑打印到輸出文本文件中,並添加一些上下文。 對於兩個stringB部分,引號很重要,我只想查找具有stringB的文件,其中包含單引號或雙引號。 換一種說法,

所有包含stringA但沒有引號的文件和帶有單引號或雙引號的stringB。

任何幫助表示贊賞,謝謝!

編輯:抱歉問一個可怕的問題:)

我做了一些研究並找出了部分內容。 我找到了正則表達式找到我要找的字符串。 實際的字符串是“ATA”。 要在全局范圍內找到它,不區分大小寫,並且在字符串的兩邊都有一些或沒有空格的任何類型的引號,我們可以使用:

/['"]\s*ATA\s*['"]/gi

我需要找到的第一個字符串是一個函數調用:調用wflnkmod(和正則表達式是:

/call\swflnkmod\(/gi

現在我只需要弄清楚如何搜索文件並確保其中包含每個文件的實例,然后找出用於遞歸搜索所有文件並將其打印到輸出文件的grep命令!

應該做的伎倆( <dir>需要替換為要搜索的目錄):

grep -r -i -l "stringA" <dir> | xargs grep -i -l -E "'stringB'|\"stringB\""

說明

上面的行首先搜索stringA 生成的文件列表通過管道傳輸到xargs並使用stdin提供的其他參數調用指定的命令( grep -i -l -E "'stringB'|\\"stringB\\"" )(文件列表,包含stringA )。

grep選項:

  • -r, --recursive (自我解釋)
  • -i, --ignore-case搜索不區分大小寫
  • -l, --files-with-matches僅打印與給定模式匹配的文件的文件名
  • -E將模式解釋為擴展正則表達式

您嘗試過的表達式的兩個主要問題是:

  1. 不恰當地使用[] []允許您定義字符集 ,例如[abcd]匹配指定字符之一。
  2. 表達式中引號的引用或轉義不正確。 如果用雙引號( " )引用某些內容,則引用字符串中的雙引號需要轉義\\" "在引用的字符串中產生一個" 。如果你根本沒有引用你的表達式, (需要進行轉義) 。

對於AND搜索,最好鏈接grep s, OR可以處理。

假設我們正在尋找單詞cat"ata"'ata' 如果您只對文件名感興趣,而不是實際匹配...

grep -wilm1 cat file* | xargs  grep -wilEm1 "'ata'|\"ata\""

file1
file2

搜索完整單詞匹配-w (不是子串),在第一次匹配-m1后退出並忽略-m1-i )。 OR需要-E標志。 -l僅打印文件名。

這是用於測試的文件。

==> file1 <==
cat
fat hat "ata"

==> file2 <==
cat fat hat 'ata'

==> file3 <==
cat fat hat ata

==> file4 <==
category fat hat ata

暫無
暫無

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

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