我有一个脚本将ip地址写入文件ip.txt
我想用ip.txt
中的ip替换html文件中的ip地址。
我有一个与ip地址匹配的sed正则表达式,我想用ip.txt
的内容替换这个匹配的文本:
"s/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}//g"
如何让sed
提取ip.txt
的内容并将其放入s/<search>/<*HERE*>/g
表达式?
有没有比这更好的方法?
sed -e "s/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/"`cat ip.txt`"/g"
答案 0 :(得分:4)
没有太大改进,但你可以替换
"`cat ip.txt`"
与
$(<ip_txt)
将替换为文件内容,效率略高于使用cat
。
答案 1 :(得分:3)
在运行sed命令之前,您可以将IP读入shell变量。假设ip.txt是仅包含IP地址的单行:
read -r ip < ip.txt
sed -e "s/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/$ip/g" file.html > newfile.html
mv newfile.html file.html
答案 2 :(得分:2)
POSIX sed
(因此大多数可用的sed
实现)支持r file
命令在匹配行时读取文件。只要您不介意在IP地址的任何一侧包含换行符的结果,您就可以使用r
轻松完成。描述说:
[1addr] r rfile
如前所述,将 rfile 的内容复制到标准输出。如果 rfile 不存在或无法读取,则应将其视为空文件,不会导致错误。
这意味着您没有机会编辑文件的内容,而如果将其读入模式空间或保留空间,则可以修改数据。
在这种情况下,您的命令行替换就像您可以做的一样好。