如何在没有前导空格的情况下进行 grep?

And*_*rew 20 command-line grep sed text-processing

我正在浏览一个大型代码库,前导空格和制表似乎很烦人。有没有办法摆脱它?

grep -R "something" ./
Run Code Online (Sandbox Code Playgroud)

例如,而不是:

foo/bar.cpp:                       qwertyuiosomethingoi
foo/bar/baz.h:                          43rfsgsomethingdrfg
bar/bar.cpp:            1234edwssomethingczd
Run Code Online (Sandbox Code Playgroud)

我想得到类似的东西:

foo/bar.cpp: qwertyuiosomethingoi
foo/bar/baz.h: 43rfsgdsomethingrfg
bar/bar.cpp: 1234edwssomethingczd
Run Code Online (Sandbox Code Playgroud)

或更好:

foo/bar.cpp:   qwertyuisomethingooi
foo/bar/baz.h: 43rfsgdrsomethingfg
bar/bar.cpp:   1234edwssomethingczd
Run Code Online (Sandbox Code Playgroud)

Sud*_*jee 9

你可以使用消除它们 sed

grep blah filename.foo | sed -e 's/^[ \t]*//'
Run Code Online (Sandbox Code Playgroud)

这将从输出中删除前导空格

  • 这不会有任何影响,因为输出中任何行的开头都没有空格。 (2认同)

Kus*_*nda 7

假设您正在re一个文件中寻找模式(一种基本的正则表达式),并且您想从所有匹配行中去除前导空格:

sed -n -e 's/^[[:blank:]]*//' -e '/re/p' thefile.c
Run Code Online (Sandbox Code Playgroud)

(其实这个是先把所有前导空格去掉,然后再找模式,但结果是一样的)

要对grep输出进行后处理(如您编辑的问题):

grep -e 're' -- * | sed 's/:[[:blank:]]*/: /'
Run Code Online (Sandbox Code Playgroud)

该模式[[:blank:]]*匹配零个或多个空格或制表符。

如果您在 之后插入一个制表符而不是空格:,您还会获得一些您要求的漂亮的均匀缩进。

  • 在 grep 调用中使用 --color=always(假设为 GNU grep)。sed 调用不会删除颜色,当输出没有进入终端时,grep 本身不使用颜色(默认为 --color=auto)。“总是”强制它,嗯,*总是*使用颜色。 (3认同)

Pet*_*r.O 4

创建测试文件

echo -e "\t   foo-somethingfoo" >something.foo
echo "    bar-bar-somethingbar" >something.bar_bar
echo "baz-baz-baz-somethingbaz" >something.baz_baz_baz
echo "  spaces    something  s" >something.spaces
Run Code Online (Sandbox Code Playgroud)

产生绚丽的色彩:)

grep --colour=always "something" something.* | 
 sed -re  's/^([^:]+):(\x1b\[m\x1b\[K)[[:space:]]*(.*)/\1\x01\2\3/' |
   column -s $'\x01' -t
Run Code Online (Sandbox Code Playgroud)

输出(运行它以获得颜色)。

something.bar_bar      bar-bar-somethingbar
something.baz_baz_baz  baz-baz-baz-somethingbaz
something.foo          foo-somethingfoo
something.spaces       spaces    something  s
Run Code Online (Sandbox Code Playgroud)

测试于gnome-terminal, konsole, terminator,xterm