Grep

遞歸搜尋兩個字元串之間的文本

  • February 10, 2022

我正在嘗試遞歸搜尋許多不同文件中兩個字元串之間的文本。這兩個(下)在一個包含 hits.txt 文件的文件夾中搜尋時都有效,但我想從更高級別的目錄中執行此操作,因此我沒有在每個文件夾中分別執行其中任何一個。

awk '/aaa/,/bbb/' hits.txt  >> As.doc
sed -n '/aaa/,/bbb/p' hits.txt > As.doc

我已經嘗試了各種 grep 命令來進行如下所示的遞歸搜尋,但它只是創建了一個空文件。

grep -r --include='*.txt' '/aaa/,/bbb/' > As.doc

我不確定什麼最有效,或者我是否應該將 find 與上述之一一起使用。

grep實用程序沒有一系列行的概念,就像兩者sed和一樣awk,所以表達式/aaa/,/bbb/不會像你期望的那樣(它只會匹配文字文本,包括斜杠和逗號,這大概就是你得到一個空的原因結果)。

假設您顯示的sedawk命令有效,並且您唯一需要幫助的是將這些應用於名稱以 結尾的文件.txt,從目前目錄遞歸。

find . -type f -name '*.txt' -exec awk '/aaa/,/bbb/' {} + >As.doc

或者

find . -type f -name '*.txt' -exec sed -n '/aaa/,/bbb/p' {} + >As.doc

這些命令將查找目前目錄中或目前目錄下的所有正常文件,並使用這些文件批量呼叫awkor實用程序。sed來自find(將是來自awkor的輸出sed)的輸出被重定向到As.doc在目前目錄中呼叫的文件(如果該文件不存在,則該文件將被截斷(清空)或創建)。

引用自:https://unix.stackexchange.com/questions/690107