我有许多HTML文件,它们具有我想要替换的相同部分:
<div id="main-content" class="span12">
<h1 id="404-page-not-found" style="text-align: center">404</h1>
<p style="text-align: center"><strong>Page not found</strong></p>
<p style="text-align: center"><a href=".">Home</a></p>
</div>
我想用{{NAV}}
我觉得我可以这样做:
bash脚本:
#!/bin/bash
find -name '*.html' | while read FILE; do
sed --in-place -f replace.sed "$FILE"
done
replace.sed:
<my code above here>{
r replacement
d
}
替换:
{{NAV}}
但我无法获取我想要的代码并在replace.sed中替换正确。
有人能想出更好的方法或如何正确格式化我的代码吗?
答案 0 :(得分:1)
如果您用此替换replace.sed
,它应该有效:
/<div id="main-content" class="span12">/ { # If we match the first line
:x # Label to branch to
N # Read next line into pattern buffer
/<\/div>$/! bx # If we don't match the closing tag, branch to x
c \{{NAV}} # Replace the pattern buffer with {{NAV}}
}
如果第一行和最后一行足以唯一标识要替换的html片段,则此方法有效。如果你想完全匹配整个片段,你可以这样做:
/^<div id="main-content" class="span12">/ {
N
/<h1 id="404-page-not-found" style="text-align: center">404<\/h1>/! b
N
/<p style="text-align: center"><strong>Page not found<\/strong><\/p>/! b
N
/<p style="text-align: center"><a href=".">Home<\/a><\/p>/! b
N
/<\/div>$/ c \{{NAV}}
}
这个工作原理如下:
N
)b
)并打印模式空间,否则加载下一行{{NAV}}
,否则只需将其打印