1

我正在处理一个 html 项目并且必须操作大量文件,所以我使用 sed、head & tail 来完成这项工作,但现在我被困在了这一点上。

要删除的字符串<i><font color="#000000"> and <font color="#000000"><i>

但不是以开头的行<b><font color="#000000"><p align="JUSTIFY"> and <p align="JUSTIFY"> and </font></b><p align="JUSTIFY">

顺便说一句,我已经写了一个,但无法弄清楚它有什么问题

sed -rei '/^<b><font color="#000000"><p align="JUSTIFY">RELATIONS.|<p align="JUSTIFY">|</font></b><p align="JUSTIFY">/! s/<font color="#0000ff"><i>|<i><font color="#0000ff">//g'

非常感谢任何帮助或建议。

问候

编辑:再次查看 html 后,我知道我们实际上想从第 8 行编辑到最后,除了所有文件的最后一行

例子

line 1 <i>some text<i>
line 2 <i>some text<i>
line 3 <i>some text<i>
line 4 <i>some text<i>
line 5 <i>some text<i>
line 6 <i>some text<i>
line 7 <i>some text<i>
line 8 <i>some text<i>
line 9 <i>some text<i>
line 10 <i>some text<i>
S       <i>some text<i>
o       <i>some text<i>
-       <i>some text<i>
o       <i>some text<i>
n       <i>some text<i>   
line N <i>some text<i>    

line 1 <i>some text<i>
line 2 <i>some text<i>
line 3 <i>some text<i>
line 4 <i>some text<i>
line 5 <i>some text<i>
line 6 <i>some text<i>
line 7 <i>some text<i>
line 8 some text
line 9 some text
line 10 some text
S       some text
o       some text
-       some text
o       some text
n       some text   
line N <i>some text<i>
4

2 回答 2

0

使用不同的分隔符:

sed -rei 'X^(<b><font color="#000000"><p align="JUSTIFY">)|(<p align="JUSTIFY">)|(</font></b><p align="JUSTIFY">)X! sX(<font color="#0000ff"><i>)|(<i><font color="#0000ff">)XXg'

请注意我如何用作X分隔符,因为您的正则表达式包含正斜杠,如果您使用斜杠的典型分隔符,您将不得不转义它们,这是我避免的麻烦。

此外,您的正则表达式中隐藏了文本 RELATIONS,我将其删除。

于 2013-05-02T17:27:36.147 回答
0

只需使用 awk:

awk '!/^(<b><font color="#000000"><p align="JUSTIFY">|<p align="JUSTIFY">|<\/font><\/b><p align="JUSTIFY">)/{ gsub(/<i><font color="#000000">|<font color="#000000"><i>/,"") } 1' file

现在我对您的要求有了更好的感觉,您可以将初始条件稍微压缩为:

awk '!/^(<b><font color="#000000">|<\/font><\/b>)?<p align="JUSTIFY">)/{ gsub(/<i><font color="#000000">|<font color="#000000"><i>/,"") } 1' file

鉴于您的新要求显然是简单地将所有<i>s 从第 8 行删除到最后一行之前的行,这个怎么样:

$ cat file
line 1 <i>some text<i>
line 2 <i>some text<i>
line 3 <i>some text<i>
line 4 <i>some text<i>
line 5 <i>some text<i>
line 6 <i>some text<i>
line 7 <i>some text<i>
line 8 <i>some text<i>
line 9 <i>some text<i>
line 10 <i>some text<i>
S       <i>some text<i>
o       <i>some text<i>
-       <i>some text<i>
o       <i>some text<i>
n       <i>some text<i>
line N <i>some text<i>

$ awk -v numLines=$(wc -l<file) 'NR>7 && NR<numLines{gsub(/<i>/,"")}1' file
line 1 <i>some text<i>
line 2 <i>some text<i>
line 3 <i>some text<i>
line 4 <i>some text<i>
line 5 <i>some text<i>
line 6 <i>some text<i>
line 7 <i>some text<i>
line 8 some text
line 9 some text
line 10 some text
S       some text
o       some text
-       some text
o       some text
n       some text
line N <i>some text<i>
于 2013-05-02T13:36:38.867 回答