查找


find [路径] <表达式>
查找文件
-name <表达式> 根据文件名查找文件
-iname <表达式> 根据文件名查找文件,忽略大小写
-path <表达式> 根据路径查找文件
-ipath <表达式> 根据路径查找文件,忽略大小写
-amin <分钟> 过去N分钟内访问过的文件
-atime <天数> 过去N天内访问过的文件
-cmin <分钟> 过去N分钟内修改过的文件
-ctime <天数> 过去N天内修改过的文件
-anewer <参照文件> 比参照文件更晚被读取过的文件
-cnewer <参照文件> 比参照文件更晚被修改过的文件
-size <大小> 根据文件大小查找文件,单位b c w k M G
-type <文件类型> 根据文件类型查找文件。b 块设备 c 字符设备 d 目录 p 管道文件 f 普通文件 l 链接 s 端口文件
-user <用户名> 按归属用户查找文件
-uid <uid> 按UID查找文件
-group <群组名> 按归属群组查找文件
-gid <gid> 按GID查找文件
-empty 查找空文件


从文件内容查找匹配指定字符串的行:
$ grep "被查找的字符串" 文件名


从文件内容查找与正则表达式匹配的行:
$ grep –e “正则表达式” 文件名


查找时不区分大小写:
$ grep –i "被查找的字符串" 文件名


查找匹配的行数:
$ grep -c "被查找的字符串" 文件名


从文件内容查找不匹配指定字符串的行:
$ grep –v "被查找的字符串" 文件名

从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行

find / -type f -name "*.log" | xargs grep "ERROR"

 



系统查找到httpd.conf文件后即时在屏幕上显示httpd.conf文件信息。 
find/-name"httpd.conf"-ls

在根目录下查找某个文件
find . -name "test"

在某个目录下查找包含某个字符串的文件

grep -r "zh_CN" ./

 

查找替换

批量查找并替换文件内容。

#   sed -i "s/要找查找的文本/替换后的文本/g" `grep -rl "要找查找的文本" ./`

 

对于单个文件,使用sed命令很容易做到。如果需要替换某个指定文件夹下所有文件,借助grep和sed组合成一条命令也可以轻松搞定。

grep命令可以查找单个文件或文件夹下文件中的内容,使用参数“r”或“-R”可以递归查找指定文件夹下的所有文件;

参数“l”可以让grep输出包含指定字符串的文件名,首次匹配成功后立刻停止对同文件的查询

如果不使用“l“,grep查询单个文件时输出文件中所有包含指定字符串的行,对文件夹查询时则按照“文件名:包含字符串行”的方式输出。

有了上面提到的知识,执行批量替换的命令可以写为:

grep "netingcn" -rl /assign-path | xargs sed -i 's/netingcn/ingcn/g'

sed -i 's/netingcn/ingcn/g' `grep "netingcn" -rl /assign-path`

还有一种比较复杂的写法:

grep "netingcn" * -R | awk -F: '{print $1}'  | sort | uniq | xargs sed -i 's/netingcn/ingcn/g'

其中命令awk用于分割字符串、uniq对结果进行除重。

格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 


 将当前目录下的所有文件内的“garden”替换成“mirGarden” 
 sed -i "s/garden/mirGarden/g" `ls` //其实也就是ls出多个文件名而已

 

比如,要将目录/modules下面所有文件中的zhangsan都修改成lisi,这样做:
sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules`
解释一下:
-i 表示inplace edit,就地修改文件
-r 表示搜索子目录
-l 表示输出匹配的文件名




删除  rm + find

find PATH -name REGX | xargs rm -rf

 

posted on 2015-01-06 16:23  梦想人生  阅读(1029)  评论(0编辑  收藏  举报