我们正在移动现有网站以使用img
资源的CDN分发。项目经理已经强制要求在每个页面上我们必须将img src
分发给六个不同的CDN子域之一 - 这个想法是因为对不同域的下载请求同时执行而不是串行执行,我们将获得速度优势
换句话说,我需要改变这个......
<p>Argle bargle.</p>
<img src="http://old-domain.com/_img/image-a.jpg">
<img src="http://old-domain.com/_img/image-b.jpg">
<img src="http://old-domain.com/_img/image-c.jpg">
<img src="http://old-domain.com/_img/image-d.jpg">
<img src="http://old-domain.com/_img/image-e.jpg">
<img src="http://old-domain.com/_img/image-f.jpg">
<img src="http://old-domain.com/_img/image-g.jpg">
<img src="http://old-domain.com/_img/image-h.jpg">
<p>Whiz bang.</p>
进入这个...
<p>Argle bargle.</p>
<img src="http://cdn1.cdn.com/_img/image-a.jpg">
<img src="http://cdn2.cdn.com/_img/image-b.jpg">
<img src="http://cdn3.cdn.com/_img/image-c.jpg">
<img src="http://cdn4.cdn.com/_img/image-d.jpg">
<img src="http://cdn5.cdn.com/_img/image-e.jpg">
<img src="http://cdn6.cdn.com/_img/image-f.jpg">
<img src="http://cdn1.cdn.com/_img/image-g.jpg">
<img src="http://cdn2.cdn.com/_img/image-h.jpg">
<p>Whiz bang.</p>
我有数百个要更新的文件,它们比上面的示例复杂得多。如果CDN只是一个域,我会使用TextWrangler批量替换所有文件。但我需要以某种方式序列化(甚至随机化?)替换字符串。
我使用FileMaker Pro作为生产前端(自动导航构建,元标记等),因此我尝试在我的HTML输出字段上创建一个计算,它将序列化每个src,但我认为它需要一个for-each循环,你不能在计算字段中做(我有FM Pro,而不是FM Pro Advanced,所以我不能使用自定义函数)。
有人在AppleScript上做过类似的事吗?或者可以利用终端文本处理器?任何建议都将不胜感激。
答案 0 :(得分:0)
我建议您使用这样的简单bash脚本:
#!/bin/bash
OLD="old-domain.com\/_img"
NEW="cdn1.cdn.com\/_img"
DPATH="/home/of/your/files/*.html"
for f in $DPATH
do
sed "s/$OLD/$NEW/g" "$f" > temp; mv temp "$f";
done
它会在old-domain.com/_img
上的所有cdn1.cdn.com/_img
个文件中用.html
替换/home/of/your/files/
。
答案 1 :(得分:0)
您实际上是在从FileMaker编写HTML吗?如果是这种情况,并且您想使用Perform AppleScript
操纵HTML,那么您可以执行以下操作。
最佳实践:始终使用&#34; Native AppleScript&#34;而不是&#34;计算AppleScript&#34;。要将数据输入和输出AppleScript,请创建一对全局字段,以便在FileMaker和AppleScript之间进行读写。这有助于您在与其他应用程序交谈时隔离AppleScript错误,以便它们不会流入后续脚本步骤。 (我更喜欢创建一个Global
表并创建一个名为@Global
的表格。在Global
表格中,我创建了两个字段:AppleScriptInput
和AppleScriptOutput
。你必须在这个表中创建一个记录,否则你会发现神秘的#34; AppleScript中找不到对象&#34;错误。)
Set Field [@Global::AppleScriptInput; $myHtml]
Perform AppleScript [“
-- Read HTML from a global field in FileMaker
set html to get data (table "@Global")'s (field "AppleScriptInput")
-- Split html on old domain fragment
set my text item delimiters to "<img src=\"http://old-domain.com/_img/"
set html_fragments to text items of html
-- Prefix resource with CDN domain fragment
repeat with i from 2 to length of html_fragments
set cdn_number to (i - 2) mod 6 + 1
set cdn_fragment to "<img src=\"http://cdn" & cdn_number & ".cdn.com/_img/"
set item i of html_fragments to cdn_fragment & item i of html_fragments
end repeat
-- Re-join html fragments
set my text item delimiters to ""
set html to html_fragments as text
-- Write html back to a global field in FileMaker
set data (table "@Global")'s (cell "AppleScriptInput") to html
”]
Set Variable [$revisedHtml; @Global::AppleScriptOutput]
上述脚本步骤将读取您从FileMaker变量$html
提供的输入,并将您提供的输出保存到$revisedHtml
。
当然,您可以在纯FileMaker脚本中执行相同的操作:
Set Variable [$html; "<p>Argle bargle.</p>
<img src=\"http://old-domain.com/_img/image-a.jpg\">
<img src=\"http://old-domain.com/_img/image-b.jpg\">
<img src=\"http://old-domain.com/_img/image-c.jpg\">
<img src=\"http://old-domain.com/_img/image-d.jpg\">
<img src=\"http://old-domain.com/_img/image-e.jpg\">
<img src=\"http://old-domain.com/_img/image-f.jpg\">
<img src=\"http://old-domain.com/_img/image-g.jpg\">
<img src=\"http://old-domain.com/_img/image-h.jpg\">
<p>Whiz bang.</p>"
]
Set Variable [$oldDomain; "http://old-domain.com/_img/"]
Set Variable [$itemCount; PatternCount ( $html ; $oldDomain )]
Loop
Exit Loop If [Let ( $i = $i + 1 ; If ( $i > $itemCount ; Let ( $i = "" ; True ) ) )]
Set Variable [$html;
Let ( [
domainPosition = Position ( $html ; "http://old-domain.com/_img/" ; 1 ; 1 );
domainLength = Length ( "http://old-domain.com/_img/" );
cdnNumber = Mod ( $i - 1 ; 6 ) + 1
] ;
Replace ( $html ; domainPosition ; domainLength ; "http://cdn" & cdnNumber & ".cdn.com/_img/" )
)
]
End Loop
Show Custom Dialog ["Result"; $html]