在子目录中grep 如果想在当前目录及其子目录下查找文件中特定的字符串,可以使用一下命令:
find . -name "*" | xargs grep -n "string"
find . -print | xargs grep "string"
xargs是说明可以使用很长的命令行参数。
其中:
-n:显示文件中匹配string的行号
grep -nR "string" .
在目录中查找特定文件含有的字符串
find ./frameworks/base -name Android.mk -exec grep -l libandroid.servers {} \;
在当前目录下(Android Project)的frameworks\base子目录下查找所有Android.mk文件,并在Android.mk文件中查找libandroid.servers字符串,如果找到通过grep -l选项则打印此Android.mk文件所在的路径
其中,
-exec 参数后面跟的是 command命令,注意点如下:
command命令的终止,使用 ';' (分号)来判定,在后面必须有一个 ';'
'{}',使用{}来表示文件名,也就是find前面处理过程中过滤出来的文件,用于command命令进行处理
特别强调,对于不同的系统,直接使用分号可能会有不同的意义, 使用转义符 '\'在分号前明确说明
通过find查找文件,并将找到的文件拷贝至指定目录
find . -name "*dma*" -exec cp {} dst_dir \;
find . -name "*dma*" | xargs cp {} dst_dir
find . -name "*dma*" -exec scp {} 用户名@主机ip:dst_dir \;
用sed命令可以批量替换多个文件中的字符串
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
sed -i "s/oldString/newString/g" `grep oldString -rl /path`
在shell中使用find结合grep进行文件的替换
find ./ -exec grep str1 ‘{}’ \; -exec sed -i.bak s/str1/str2/g ‘{}’ \;
在当前目录下(包括子目录)查找包含str1的文件,自动替换成str2,并且生成源文件的bak文件
阅读(813) | 评论(0) | 转发(0) |