我试图知道我需要编辑哪些文件,它们遵循一种模式,即使用 grep (grep -rnw . -e "text"
) 很容易搜索,但它为每个匹配项返回数倍相同的文件路径。
我怎样才能避免它?
例:
./rnaspace_cli.py:41:from rnaspace.core.id_tools import id_tools
./rnaspace_cli.py:42:from rnaspace.core.sequence import sequence
./rnaspace_cli.py:44:from rnaspace.core.trace.event import add_seq_event
./rnaspace_cli.py:45:from rnaspace.core.trace.event import disk_error_event
./rnaspace_on_web:33:from rnaspace.ui.web.controller.rnaspace_controller import rnaspace_controller
期望输出:
./rnaspace_cli.py:41:from rnaspace.core.id_tools import id_tools
./rnaspace_on_web:33:from rnaspace.ui.web.controller.rnaspace_controller import rnaspace_controller
甚至更好的是路径和文件:
./rnaspace_cli.py
./rnaspace_on_web
从 grep 手册页:
-l, --files-with-matches
Suppress normal output; instead print the name of each input file from which output would normally have
been printed. The scanning will stop on the first match. (-l is specified by POSIX.)
所以
grep -l 'pattern' files*
将仅显示包含模式的文件名
这应该有效:
grep -rnw . -e "text" | awk -F: '{print $1}' | uniq
编辑说明:
-
awk -F: '{print $1}'
- 在:
符号处拆分输出并仅打印第一部分 -
uniq
- 仅显示一次重复的行
在 grep 中使用-l
选项仅在 outout 中获取文件名:
grep -lrnw . -e "text"