一、查找文件内容、文件名的方法

比如查找当前目录下面所有的php文件里面某个关键字

代码如下:
find ./ -name “*.php” | xargs grep ‘关键字’

如果需要查找的内容包含特殊符号,比如$等等,grep要加参数

代码如下:

find ./ -name "*.php" | xargs grep -F '关键字'
find ./ -name "web.conf" | xargs grep -F 'default'

这行代码的意思是,查找当前目录及所有子目录下,文件名为“web.conf”,内容保护“default”的文件。

文件名查找

文件名查找方法:

例如我们知道某个文件包含有srm这3个字母,那么要找到系统中所有包含有这3个字母的文件是可以实现的,输入:

代码如下:

find /etc -name ‘*srm*’

这 个命令表明了linux系统将在/etc 整个目录中查找所有的包含有srm这3个字母的文件,比如 absrmyz,tibc.srm等等符合条件的文件都能显示出来。如果你还知道这个文件是由 srm 这3个字母打头的,那么我们还可以省略最前面的星号,命令如下:

代码如下:

find /etc -name ‘srm*’

一些其它参考

find -name april* 在当前目录下查找以april开始的文件
find -name april* fprint file 在当前目录下查找以april开始的文件,并把结果输出到file中
find -name ap* -o -name may* 查找以ap或may开头的文件
find /mnt -name tom.txt -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型为vfat的文件
find /mnt -name t.txt ! -ftype vfat 在/mnt下查找名称为tom.txt且文件系统类型不为vfat的文件
find /tmp -name wa* -type l 在/tmp下查找名为wa开头且类型为符号链接的文件
find /home -mtime -2 在/home下查最近两天内改动过的文件
find /home -atime -1 查1天之内被存取过的文件
find /home -mmin +60 在/home下查60分钟前改动过的文件
find /home -amin +30 查最近30分钟前被存取过的文件

 

二、批量替换文件内容的方法

方法1:
命令结构如下:
find -name ‘要查找的文件名’ | xargs perl -pi -e ‘s|被替换的字符串|替换后的字符串|g’
下面这个例子就是将当前目录及所有子目录下的所有pom.xml文件中的”http://repo1.maven.org/maven2“ 替换为”http://localhost:8081/nexus/content/groups/public“.
find -name ‘pom.xml’ | xargs perl -pi -e ‘s|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content /groups/public|g’
这里用到了Perl语言,perl -pi -e 在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.
从命令行中使用Perl 能够帮助实现一些强大的、实时的转换。认真研究正则表达式,并正确地使用,将会为您省去大量的手工编辑工作。
find -name ‘pom.xml’ | xargs perl -pi -e ‘s|http://repo1.maven.org/maven2|http://localhost:8081/nexus/content/groups/public|g’
实际案例(替换 当前目录及所有子目录下的 “web.conf”文件中“default”为“hosting”):
find ./ -name “web.conf” | xargs perl -pi -e ‘s|default|hosting|g’
对于有参数的文件替换,我们可以使用脚本。如下脚本就是对批量配置文件snginx.conf,按照不同的用户$user来修改open_basedir。
#!/bin/sh
user=$1
#echo $user
cd /dir1/$user/dir3/dir4/
find ./ -name “snginx.conf” | xargs perl -pi -e ‘s|”open_basedir=\$document_root:/tmp/”|”open_basedir=\$document_root:/tmp/:/dir1/’$user’/”|g’
service nginx reload
方法2:

Linux下批量替换多个文件中的字符串的简单方法。用sed命令可以批量替换多个文件中的字符串。
用sed命令可以批量替换多个文件中的 字符串。
sed -i “s/原字符串/新字符串/g” `grep 原字符串 -rl 所在目录`
例如:我要把mahuinan替换 为huinanma,执行命令:
sed -i “s/mahuinan/huinanma/g” ‘grep mahuinan -rl /www’
这是目前linux最简单的批量替换字符串命令了!
具体格式如下:
sed -i “s/oldString/newString/g”  `grep oldString -rl /path`
实例代码:sed -i “s/大小多少/日月水火/g” `grep 大小多少 -rl /usr/aa`
sed -i “s/大小多少/日月水火/g” `grep 大小多少 -rl ./`

方法3:

在日程的开发过程中,可能大家会遇到将某个变量名修改 为另一个变量名的情况,如果这个变量是一个局部变量的话,vi足以胜任,但是如果是某个全局变量的话,并且在很多文件中进行了使用,这个时候使用vi就是 一个不明智的选择。这里给出一个简单的shell命令,可以一次性将所有文件中的指定字符串进行修改:

grep “abc” * -R | awk -F: ‘{print $1}’ | sort | uniq | xargs sed -i ‘s/abc/abcde/g’

批量替换 配置文件中的IP:

grep “[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}” * -R | awk -F: ‘{print $1}’ |  sort | uniq | xargs sed -i ‘s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/172\.0\.0\.1/g’ 
from: http://blog.zol.com.cn/1395/article_1394052.html

补充说明
sed -i “s/oldString/newString/g”  `grep oldString -rl /path`
对多个文件的处理可能不支持,需要用 xargs, 搞定。
变种如下:
grepoldString -rl /path | xargssed -i “s/oldString/newString/g”

注意
在  `grep oldString -rl /path`   中 ` 为1前边的翻引号`,而不是enter 前的 

以上部分摘抄互联网其他网站内容。

发表评论

您的电子邮箱地址不会被公开。