如何解决sed / awk / grep / perl ...脚本,用于在文件中查找文件内容,如果匹配,则将其更改为另一个文件的内容
我需要在HTML / JS单行生成的文件中查找并替换内嵌svg代码。
我看到了许多用于在另一个文件中匹配文件内容的sed和/或awk脚本示例,但遇到两个问题:我无法弄清楚如何用第三个文件的内容替换匹配的文件或仅当整行与文件匹配时才有效(被搜索的文件是单行html,所有代码都粘合在一起...)。
将其放入简单的伪代码中,我正在寻找的是:
IF oldImage.svg IS MATCHED IN file.html THEN REPLACE MATCHED TEXT BY newImage.svg
我知道整个svg文件在运行时都在html文件中匹配
grep -wFf oldImage.svg file.html
成功。
此外,如果该解决方案可以对子文件夹中的所有文件进行递归,那将是一个很好的选择。
。
更新:
@anubhava要求的示例
oldImage.svg
<svg>old file graphics...</svg>
newImage.svg
<svg>great new graphics...</svg>
file.html(脚本之前)
<html>
<head>
<title> example </title>
</head>
<body>
<svg>old file graphics...</svg>
</body>
</html>
file.html(运行脚本后)
<html>
<head>
<title> example </title>
</head>
<body>
<svg>great new graphics...</svg>
</body>
</html>
(请记住,我编写了多行示例以提高可读性,但是我打算使用的HTML代码全部粘贴在一行上,或者至少在同一行上有多个不同的标签)
解决方法
awk '
ARGIND == 1 { old=$0 }
ARGIND == 2 { new=$0 }
ARGIND == 3 {
if ( s = index($0,old) ) {
$0 = substr($0,1,s-1) new substr($0,s+length(old))
}
print
}
' oldImage.svg newImage.svg file.html
上面的代码将GNU awk用于ARGIND,如果没有,则在顶部添加一行:
FNR == 1 { ARGIND++ }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。