如何使 grep 命令在通过locate 命令找到的路由指定的文件中定位某些单词?
locate my.cnf | grep user
(我希望 grep 命令在找到的文件中搜索“用户”一词以查找命令)
答案1
如果您的搜索结果肯定返回不带空格的路径,您可以xargs
这样使用:
locate my.cnf | xargs grep user
xargs
但是,您应该养成保护自己的习惯,通过告诉使用null
作为分隔符并告诉locate
(或您用来返回字符串的任何程序)也将其作为分隔符发送来处理路径或文件名可能包含空格的情况像这样:
locate -0 my.cnf | xargs -0 grep user
即使您的路径包含诸如/name with space/my.cnf
.
答案2
如果我理解正确的话,你可以这样做:
#!/bin/sh
typeset what1=$1
typeset what2=$2
[ "$#" -eq 2 ] || { echo "Two arguments expected"; exit 1; }
locate ${what1} | while read file; do
grep ${what2} ${file} /dev/null
done
locate
这会在与参数 ( )匹配的文件中搜索what1
匹配的字符串what2
。该dev/null
参数强制grep
报告匹配的文件名。
答案3
单线:
for file in $(locate my.cnf) ; do grep -r user "$file" ; done
如果您想在从locate获得的目录名下的文件中搜索模式,那么-r
将处理它,否则删除-r
.