在多个文件中删除带有变量的html代码字符串

时间:2014-04-16 19:11:10

标签: html sed var

我有多个html个文件。其中,访问键设置为nextprevious页面。这两个页面的链接放在页眉和页脚中。由于两面性,accesskey无法正常工作(即打开页面)。

解决方案是从标头中删除链接。标题写在一行中,因此我要删除的两个链接位于第二行。

因为它包含要打开的文件的名称,所以我需要为这些文件名创建var或者创建一些其他更复杂的命令(以下命令用于将所有文件重命名为### {000..999})。我不知道以下复杂的cmd是否会改变html文件的输出名称(这是不可取的)

$ ls *.html | awk 'BEGIN{ a=0 }{ printf "sed -i '2!b;s/<a accesskey="p" href="%s">Prev</a>/' *.html  %s\n", $0, a++ }' | bash


sed cmds(为清晰起见):

$ sed -i '2!b;s/<a accesskey="p" href="%s">Prev</a>/' *.html

$ sed -i '2!b;s/<a accesskey="n" href="%s">Next</a>/' *.html

如何实现这一目标?我尝试搜索网站(可能我只是不知道如何描述这个),尝试了许多带有很多选项的命令,但我无法得到它:)

更新#2
样本输入

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<html xmlns="http://www.w3.org/1999/xhtml"><td width="20%" align="left"><a accesskey="j" href="contrastchapter.html">Prev</a> </td><th width="60%" align="center">Chapter 3. Contrasts</th><td width="20%" align="right"> <a accesskey="k" href="ch03s02.html">Next</a></td></tr></table><hr/>


相同的样本输出

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<html xmlns="http://www.w3.org/1999/xhtml"><td width="20%" align="left"></td><th width="60%" align="center">Chapter 3. Contrasts</th><td width="20%" align="right"></td></tr></table><hr/>

1 个答案:

答案 0 :(得分:1)

我不确定你要做什么。你的shell示例不会执行。 我想删除想想,例如

<a accesskey="j" href="contrastchapter.html">Prev</a>

<a accesskey="k" href="ch03s02.html">Next</a>

在你的html文件的第2行。

如果是这样,为什么不尝试

#!/bin/sh                                                                                                                                    
ls *.html | while read line
do
    sed -i  ' 1,2 {                                                                                                                      
            s:<a accesskey="j" href="[[:alnum:].]*">Prev</a>::                                                                               
            s:<a accesskey="k" href="[[:alnum:].]*">Next</a>::                                                                               
        }' $line

done

我假设文件名由字母数字或句号组成......你可能需要调整一下