无法创建SED命令来更改除以特定单词开头以外的行

无法创建SED命令来更改除以特定单词开头以外的行,sed,Sed,我正在做一个html项目,需要处理大量的文件,所以我使用sed,head&tail来完成这项工作,但现在我陷入了困境 要删除的字符串和 但不在以和和开头的行中 顺便说一句,我已经写了一篇,但不知道有什么问题 sed -rei '/^<b><font color="#000000"><p align="JUSTIFY">RELATIONS.|<p align="JUSTIFY">|</

我正在做一个html项目,需要处理大量的文件,所以我使用sed,head&tail来完成这项工作,但现在我陷入了困境

要删除的字符串

但不在以

开头的行中

顺便说一句,我已经写了一篇,但不知道有什么问题

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'
sed-rei'/^

关系!s///g'

非常感谢您的帮助或建议

问候

编辑:在再次查看htmls之后,我知道我们实际上想要从第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>    
第1行有一些文本
第2行一些文本
第3行一些文本
第4行一些文本
第5行一些文本
第6行一些文本
第7行一些文本
第8行一些文本
第9行一些文本
第10行一些文本
这是一些文字
o一些文本
-一些文本
o一些文本
n一些文本
第N行是一些文本

第1行有一些文本
第2行一些文本
第3行一些文本
第4行一些文本
第5行一些文本
第6行一些文本
第7行一些文本
第8行一些文本
第9行一些文本
第10行一些文本
这是一些文字
o一些文本
-一些文本
o一些文本
n一些文本
第N行是一些文本
只需使用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'/^(

|

|

)/{gsub(/|/,“”)}1文件

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

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

)/{gsub(/|/,“”)}1'文件

考虑到您的新要求(显然是将所有
从第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>
$cat文件
第1行一些文本
第2行一些文本
第3行一些文本
第4行一些文本
第5行一些文本
第6行一些文本
第7行一些文本
第8行一些文本
第9行一些文本
第10行一些文本
这是一些文字
o一些文本
-一些文本
o一些文本
n一些文本
第N行是一些文本

$awk-v numLines=$(wc-l使用不同的分隔符:

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'
sed-rei'X^(

)|(

)|(

)X!sX()

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


您的正则表达式中也隐藏了文本关系,我将其删除。

sed-rei
给了我
-e表达式#1,char 1:在'a'、'c'或'I'之后预期\虽然我知道一点sed,但在comman和扩展表达式中非常弱。我也尝试过反斜杠,但没有成功。抱歉,我无法理解您的意思正确。愚蠢,但这意味着什么?正确的方法是什么?我猜(例如)使用“/”字符,这会破坏您的模式,这是在开始时使用“/”指定的。请选择另一个分隔符,如sed-rei“#^…”@cmonkey未更改,感谢您的输入:)谢谢你的回复,但我想一定有问题,命令刚刚删除了所有行和所有文件。这就是你要求的。你说要删除
字符串,等等,我想我明白了问题所在-当你在以

开头的行中说“不”时,我把它当作一个字符串-你可能是想写3个单独的字符串,用“或”分隔,而不是“和”。我会更新我的答案。我真的很抱歉,要么我更新了我的答案,但你真的应该在你的问题中提供一些示例/输入输出。当然,您可以通过管道将它传输到任何您想要的地方,它只是一个UNIX命令,就像其他命令一样。话虽如此,您可能不需要这样做,因为awk本身就非常有用!不知道为什么,但它给出了一个空文件?我想指定从第8行到结束的行范围,但最后一行除外,而不是从开始的行。

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'