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)
你可以使用消除它们 sed
grep blah filename.foo | sed -e 's/^[ \t]*//'
Run Code Online (Sandbox Code Playgroud)
这将从输出中删除前导空格
假设您正在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:]]*匹配零个或多个空格或制表符。
如果您在 之后插入一个制表符而不是空格:,您还会获得一些您要求的漂亮的均匀缩进。
创建测试文件
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
| 归档时间: |
|
| 查看次数: |
36131 次 |
| 最近记录: |