Text-Processing

搜尋包含文件名的字元串

  • March 7, 2019

我在一個目錄中有大量文件。這些文件包含任意文本。

我想在該特定文件文本中搜尋文件名。為了澄清,我有file1.py.txt(是的,兩個點.py.txt)並且file2.py.txt都包含文本。我想搜尋里面的字元串的存在和里面@code prefix.file1.pyfile1.py.txt字元串@code prefix.file2.py``file2.py.txt

如何進行自定義grep,使其遍歷目錄中的每個文件,使用該特定文件名在每個文件中搜尋字元串?

編輯:

我要查找的輸出寫在一個單獨的文件中,result.txt其中包含:文件名(如果找到匹配項)、行文本(找到匹配項的位置)

使用 GNU awk

gawk '
 BEGINFILE{search = "@code prefix." substr(FILENAME, 3, length(FILENAME) - 6)}
 index($0, search)' ./*.py.txt

將報告匹配的行。

要列印文件名和匹配行,請更改index($0, search)

 index($0, search) {print FILENAME": "$0}

或僅列印文件名:

 index($0, search) {print FILENAME; nextfile}

替換FILENAMEsubstr(FILENAME, 3)跳過輸出./前綴。

文件列表按詞法排序。名稱以開頭的那些.將被忽略(某些 shell 可以dotglob選擇將它們添加回來;使用zsh,您也可以使用(D)glob 限定符)。

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