在linux批量替换字符串怎么办,一开始想着直接用sed带-r之类的迭代式的方法来替换,但是发现sed没有迭代的参数,只能配合使用find来获取文件再利用sed来进行替换。

目录:

  1. 批量替换文本中的字符串
  2. find扩展使用方法
    • 以文件名查找文件
    • 一些find使用例子
    • find的进阶与优化
    • 通过修改时间查找文件
    • 结合grep通过文件内容查找文件
    • 查找文件并进行其他修改文件操作

批量替换文本中的字符串

这里直接查看查找包含字符串的文件并替换的用法

find . -name "*.conf" -exec sed -i 's/original/newstring/g' '{}' +;

该命令分为两部分 第一部分的意思是查找当前目录下的conf文件

find . -name "*.conf"

第二部分exec运行sed命令作字符串的替换,把original替换为newstring

-exec sed -i 's/original/newstring/g' '{}' +

find扩展使用方法

find的一些用法

以文件名查找文件


find  /etc -name "*.conf"

第一个参数find查询的目录,-name表示以文件名称来区分,*.conf,匹配以.conf结尾的文件

一些find使用例子

** 命 令** 作 用
find . -name name.txt 找寻当前目录下名称为name.txt的文件
find /home -name *.jpg 找寻/home目录下名称以.jpg结尾的文件
find . -type f -empty 查找当前目录下的空文件
find /home -user root -mtime 7 -iname “.txt” 找出/home目录下7天内root编辑过的以.txt结尾的文件

find的进阶与优化

默认情况下,find命令并不会跟踪链接文件,如果需要让find跟踪链接到的源文件进行匹配的话,使用-l参数可以达到目的。 find使用过滤参数提高命令执行效率,-01,-02,-03分别对应不同的搜索策略,01为默认,以文件名优先匹配,02先文件名再文件类型,03是最高级别优化。 优化参数及其意义如下: | ** 参 数** | 意义 | |————|———————————————————————————–| | -O1 | 文件名优先 | | -O2 | 文件名再文件类型 | | -O3 | find软件自动排序 | | -maxdepth X | 最大文件夹搜索深度 | | -iname | 忽略大小写 | | -not | 取反 | | -type f | 匹配文件 | | -type d | 匹配目录 |

通过修改时间查找文件

find命令可以通过文件修改时间来查找文件,这在服务器被入侵的时候除了查看日志另外的一种可以起到追溯源头的作用。

find /home/wwwroot/ -name "*.php" -mtime 2

查找网站根目录/home/wwwroot/下两天内被编辑过的php文件,可以快速找到黑客上传的php的webshell文件。

结合grep通过文件内容查找文件

查找文件夹某个包含特定内容的文件

find /home/wwwroot/ -type f -exec grep "www.bobobk.com" '{}' \; -print

查找根目录下包含www.bobobk.com的文件并把该行打印出来,当然这里除了使用exec外也可以使用linux中的管道命令。

find /home/wwwroot/ -type f -print | xargs grep "www.bobobk.com"

查找文件并进行其他修改文件操作

这才是最重要的功能,通过查找功能找到文件并使用命令对文件进行处理。只需要在find命令末尾通过-exec 加上文件操作命令即可实现。

find . -name "nginx.conf" -exec chmod 600 '{}' \;

查找nginx.conf文件并把文件权限更改为600,使用方法是-exec加上处理命令最后以’{}’ \;结尾即可。

find . -name "*.htm" -delete

查找当前目录下的htm文件并删除。。

如果查找的是对文件夹,要对文件夹处理就是execdir

find /home/wwwroot/default/ -type d -execdir  ls  '{}' \; -print

查找/home/wwwroot/default/目录下的文件夹并列出目录下的文件。

总结:

这里由内容批量替换顺便系统学习了下find的各种功能,通过把linux中的文件查找命令find做一个总结,方便以后的使用查询。主要介绍通过文件改变时间查找最新文件,文件名查找文件,以及查找到文件后如何对文件进行操作,在文件内容的批量替换中起到重要作用。

参考文件: (Find Files in Linux, Using the Command Line)[https://www.linode.com/docs/tools-reference/tools/find-files-in-linux-using-the-command-line/]