我的目录~/foo
包含许多 HTML 文件。每一种都有不同的不需要的title
元素。也就是说,每个文件都包含代码
<title>something unwanted</title>
许多这些文件还包含一些span
像这样的元素
<span class="org-document-info-keyword">#+Title:</span>
<span class="org-document-title">correct title</span>
我想编写一个脚本来扫描每个 HTML 文件,并且对于包含第二类型代码块的每个文件,title
用正确的标题替换不需要的内容。
替换标题后,我希望脚本删除第二个块中的代码。
例如,运行脚本
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!-- Created by htmlize-1.47 in css mode. -->
<html>
<head>
<title>foo.org</title>
<style type="text/css">
<!--
body {
color: #839496;
background-color: #002b36;
}
.org-document-info {
/* org-document-info */
color: #839496;
}
.org-document-info-keyword {
/* org-document-info-keyword */
color: #586e75;
}
.org-document-title {
/* org-document-title */
color: #93a1a1;
font-size: 130%;
font-weight: bold;
}
.org-level-1 {
/* org-level-1 */
color: #cb4b16;
font-size: 130%;
}
a {
color: inherit;
background-color: inherit;
font: inherit;
text-decoration: inherit;
}
a:hover {
text-decoration: underline;
}
-->
</style>
</head>
<body>
<pre>
<span class="org-document-info-keyword">#+Title:</span> <span class="org-document-title">my desired title
</span><span class="org-document-info-keyword">#+Date:</span> <span class="org-document-info"><2015-08-23 Sun>
</span>
<span class="org-level-1">* hello world</span>
Vivamus id enim.
</pre>
</body>
</html>
应该导致
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!-- Created by htmlize-1.47 in css mode. -->
<html>
<head>
<title>my desired title</title>
<style type="text/css">
<!--
body {
color: #839496;
background-color: #002b36;
}
.org-document-info {
/* org-document-info */
color: #839496;
}
.org-document-info-keyword {
/* org-document-info-keyword */
color: #586e75;
}
.org-document-title {
/* org-document-title */
color: #93a1a1;
font-size: 130%;
font-weight: bold;
}
.org-level-1 {
/* org-level-1 */
color: #cb4b16;
font-size: 130%;
}
a {
color: inherit;
background-color: inherit;
font: inherit;
text-decoration: inherit;
}
a:hover {
text-decoration: underline;
}
-->
</style>
</head>
<body>
<pre>
<span class="org-document-info-keyword">#+Date:</span> <span class="org-document-info"><2015-08-23 Sun>
</span>
<span class="org-level-1">* hello world</span>
Vivamus id enim.
</pre>
</body>
</html>
linux中有没有一个工具可以轻松做到这一点?
答案1
您可能最好编写一些脚本。该脚本并不健壮(不检查空字符串,不考虑多行中所需的标题等),但它可能可以帮助您入门。备份在你开始做任何疯狂的事情之前。
#! /bin/bash
FILES="./*.html"
for f in $FILES
do
grep '.*org-document-title">.*' $f |\
sed -e 's/.*org-document-title">\([^<]\+\).*/\n\1/g' |\
tail -n 1 |\
xargs -I new_title sed -i.bak 's/<title>[^>]\+<\/title>/<title>new_title<\/title>/g' $f
done
这仅将标题替换为新的my desired title
.您可以通过进行另一遍并删除不需要的span
元素来扩展。