我经常grep一堆文件来查找一行,然后grep返回一个结果。与其将文件名复制并粘贴到新命令中,我希望能够使用编辑器打开该结果。类似于:grep foo | vim
。有没有办法在BASH中做到这一点?
我经常grep一堆文件来查找一行,然后grep返回一个结果。与其将文件名复制并粘贴到新命令中,我希望能够使用编辑器打开该结果。类似于:grep foo | vim
。有没有办法在BASH中做到这一点?
Answers:
使用grep -l
只得到匹配的文件,而不是匹配的文本的文件名,然后结合起来vim
:
vim "$(grep -l some_pattern file_names)"
-q
标志grep
来确保grep确实导致了某些匹配文件:grep -q patterns fnames && vim $(grep -l pattern fnames)
vi
,OP可能不会。
编辑:阅读您的评论后,我意识到我最初不理解该问题。这是一个简单的脚本,它将您的搜索词作为参数,并提示您输入搜索路径。如果仅在一个文件中找到结果,它将在搜索结果的位置打开文件进行编辑。
#!/bin/bash
SRCHTRM="$1"
read -p "Where to search: " SRCHPATH
FILEFOUND=$(grep "$SRCHTRM" $SRCHPATH)
FILEFOUNDCNT=$(grep "$SRCHTRM" $SRCHPATH | wc -l)
FILEAWK=$(echo "$FILEFOUND" | awk -F":" '{ print $1 }')
if [ "$FILEFOUNDCNT" -eq "1" ];then
vi +/"$SRCHTRM" "$FILEAWK"
else
echo "$1 was found in more than one file"
fi
vim
即可STDIN
:grep foo | vim -