
當搜尋多個檔案時,grep 的輸出如下所示:
{FILE}:{MATCH}
這是一個問題,因為如果我雙擊該{FILE}
部分,我至少還會選擇(並複製)該部分,:
可能還會選擇一些匹配項。我怎麼能讓 grep 格式化其輸出,如下所示:
{FILE} : {MATCH}
基本上,我想在列之前插入一個空格。 (可選後一項)
答案1
grep -T
7/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 {} ";"