匹配多個檔案時格式化 grep 的輸出

匹配多個檔案時格式化 grep 的輸出

當搜尋多個檔案時,grep 的輸出如下所示:

{FILE}:{MATCH}

這是一個問題,因為如果我雙擊該{FILE}部分,我至少還會選擇(並複製)該部分,:可能還會選擇一些匹配項。我怎麼能讓 grep 格式化其輸出,如下所示:

{FILE} : {MATCH}

基本上,我想在列之前插入一個空格。 (可選後一項)

答案1

grep -T7/8 的時間都可以工作。

% for f in a ab abc abcd abcde abcdef abcdefg abcdefgh; do echo pattern > $f; done
% grep -T pattern *
a      :pattern
ab     :pattern
abc    :pattern
abcd   :pattern
abcde  :pattern
abcdef :pattern
abcdefg:pattern
abcdefgh       :pattern

來自GNU grep 手冊:

-T --initial-tab

確保實際行內容的第一個字元位於製表位上,以便製表符的對齊方式看起來正常。這對於將其輸出前綴為實際內容的選項很有用:-H-n-b。為了提高單一檔案中的行全部從同一列開始的機率,這也會導致行號和位元組偏移量(如果存在)以最小大小的欄位寬度列印。

答案2

grep據我所知,這本身無法完成。假設您的檔案名稱:中沒有:

grep ... | sed 's/:/ : /'

僅第一個:將被填充。

當然,您可以grep只列印文件名:

grep -l ...

答案3

什麼構成了單字就雙擊選擇而言,取決於終端(和/或 X 工具包),對於某些終端,可以自訂。

為了xterm字元組織在類別(字母、空格...)並雙擊選取同一類別的相鄰字元。

預設有描述那裡。在預設情況下,:不是與其/本身屬於同一類別,但與字母或數字不屬於同一類別。

有些系統透過提供一個來改變預設值資源文件對於xterm喜歡/etc/X11/app-defaults/XTerm

在 Linux Mint 系統上,我發現:

! Here is a pattern that is useful for double-clicking on a URL:
*charClass: 33:48,35:48,37-38:48,43-47:48,58:48,61:48,63-64:48,95:48,126:48

這將字元 58 ( :) 和 47 與字母和數字 (48) 歸為同一類。

您可以做的就是:透過您自己的資源文件將其變更為保留在自己的類別中。

例如,如果您新增:

XTerm*charClass: 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48

到您的~/".Xdefaults-$(uname -n)",然後雙擊檔案名稱將停在:.

您可以透過以下方式進行實驗:

xterm -cc 33:48,35:48,37-38:48,43-47:48,61:48,63-64:48,95:48,126:48

您也可以將三次或四次點擊的不同選擇方法定義為正規表示式。例如

XTerm*on3Clicks: regex [^:]+

將選擇非冒號字元的序列三擊

答案4

這是非常低效的,因為它會導致grep為每個輸入檔案產生一個新進程,但是:

給定一個文件列表(例如,*),執行

對於 f 在文件列表
    grep --label="$f" --with-檔名圖案<“$f”
完畢

--label=string實際上,「讀取標準輸入時,假設輸入檔名是string」。  --with-filename-H簡稱)說,“打印每場比賽的文件名。”當有多個文件需要搜尋時,這是預設值。 IMNSHO,當您指定 時,它也應該預設打開--label,但它似乎不是這樣工作的。由於我的程式碼(上面)在參數中的檔案名稱中添加了一個空格--label,因此您得到的輸出看起來像

檔案名稱:線匹配模式

如果您的檔案名稱來自find,請執行

尋找(路徑...)(表達式)-exec sh -c 'grep --label="$1" -H圖案< "$1"' sh {} ";"

相關內容