我有数千个html文件,我需要在其中替换字符串。我正在寻找以src
或href
开头的属性'../'
和'../../'
,或者下一个主机名尽可能多的时间。
示例:
href = "../../../baz.pl/baz.img"
src="../../foo.example.com/baz.img"
href="../bar.pl/style.css"
我需要用双斜杠替换路径部分。
示例:
../../../baz.pl/baz.img -> //baz.pl/baz.img
我需要在linux bash中实现这一点。什么是最好的解决方案?我应该使用什么命令?
我正在使用grep来匹配字符串。我知道find
和sed
可能是更好的解决方案,但我不能将它们合并在一起。
我工作的正则表达式是:
(?:href|src){1}\=[\"\']{1}((?:\.\.\/)+)[a-z\.].{1,40}(?:\.com|\.pl){1}
如您所见,我只需要匹配pl
和com
域
已更新
在Netbeans替换工具这个正则表达式工作:
(href|src){1}\=(\"|\'){1}(?:(?:\.\.\/)+)([a-z\.].{1,40}(?:\.com|\.pl)){1}
替换:
$1=$2//$3
现在如何将其移至Linux bash?
答案 0 :(得分:1)
您可以awk
与gensub
一起使用,以匹配论坛([.]{2}\/)+
:
awk -i inplace '{
print gensub(/(href|src)\s*=\s*\"([.]{2}\/)+(\w)([a-zA-Z0-9_\-\.]+)(.com\/|.pl\/)/,
"\\1=\"//\\3\\4\\5",
"g");
}' *.html
此处使用就地文件编辑(-i inplace
)来更新现有文档
第一部分将src
或href
与=
之前和之后的可选空格匹配:(href|src)\s*=\s*\"
结尾部分匹配.com/
或.pl/
后面的任何内容:(href|src)\s*=\s*\"