Command-Line

如何在沒有前導空格的情況下進行 grep?

  • March 16, 2021

我正在瀏覽一個大型程式碼庫,前導空格和製表符似乎很煩人。有沒有辦法擺脫它?

grep -R "something" ./

例如,而不是:

foo/bar.cpp:                       qwertyuiosomethingoi
foo/bar/baz.h:                          43rfsgsomethingdrfg
bar/bar.cpp:            1234edwssomethingczd

我想得到類似的東西:

foo/bar.cpp: qwertyuiosomethingoi
foo/bar/baz.h: 43rfsgdsomethingrfg
bar/bar.cpp: 1234edwssomethingczd

或更好:

foo/bar.cpp:   qwertyuisomethingooi
foo/bar/baz.h: 43rfsgdrsomethingfg
bar/bar.cpp:   1234edwssomethingczd

您可以使用消除它們sed

grep blah filename.foo | sed -e 's/^[ \t]*//'

這將從輸出中刪除前導空格

假設您正在一個文件中尋找模式re(一種基本的正則表達式),並且您想從所有匹配行中去除前導空格:

sed -n -e 's/^[[:blank:]]*//' -e '/re/p' thefile.c

(其實這個先去掉所有前導空格,然後再尋找模式,但是結果是一樣的)

改為對輸出進行後處理grep(如您編輯的問題中):

grep -e 're' -- * | sed 's/:[[:blank:]]*/: /'

該模式[[:blank:]]*匹配零個或多個空格或製表符。

如果您在 之後插入製表符而不是空格:,您還會獲得一些您要求的漂亮的均勻縮進。

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