将 .txt 文件中的 ip 替换为主机

将 .txt 文件中的 ip 替换为主机

我有大约 14,800 个文件分散在名为/actlogs/和 的子文件夹中。这些文件的第一行包含一个链接,例如:

http://server.com/file.pdf

我需要将字符串“server.com”替换为“server.com”的实际IP地址

有什么办法可以在 /actlogs/ 和子文件夹中找到 *.log 并为每个文件替换其 IP 的主机吗?

我正在使用 Ubuntu Server 18.04。

答案1

这听起来像是一份工作sed

sed 's/server\.com/192.168.0.1/' *.log

sed是一个逐行处理输入的流编辑器。这里我们使用的是s替代命令s/regex/replacement/flags。一旦您确定这就是您想要的,您就可以添加标志i,使更改“就位”。将*在 shell 中进行 glob 并将所有以 sed 结尾的文件.log作为输入传递给 sed。

sed 's/server\.com/192.168.0.1/' *.log

请注意,这将仅替换每行中第一次出现的模式。如果您想替换所有出现的情况,无论它们出现在哪里,您可以使用全局标志:

sed 's/server\.com/192.168.0.1/g' *.log

对于需要搜索的目录层次结构,您可以使用find然后sed在结果上执行:

find /home/www/ -type f -name '*.log' -exec \
    sed 's/server\.com/192.168.0.1/g' {} +

答案2

这应该可以完成工作:

find . -type f -name "*.log" -exec sed 's/server\.com/192.168.0.1/g' {} +

答案3

补充 @user1774469 正确答案,以允许使用 bash 替换日志下所有子文件夹中的文件中的字符串*.log,可以通过以下方式实现

1)激活globstarshell选项:

shopt -s globstar

2)发出@user1774469正确的命令并进行以下修改

sed 's/server\.com/192.168.0.1/' /actlogs/**/*.log

然后它将匹配目录.log下任何位置的扩展名的所有文件/actlogs/

相关内容