Regex 替换匹配图案上方的线条

Regex 替换匹配图案上方的线条,regex,shell,awk,sed,Regex,Shell,Awk,Sed,我有一个html文件,其中有一个表,如下所示: 未知 废话11 ... 未知的 胡说八道 … 我需要匹配“blah24”,并将上面的“未知”替换为“测试”,以给出: 测试 blah24 我曾尝试研究sed和awk解决方案,但只能找到“匹配模式之前的插入”或“匹配模式之后的替换” 我只有使用cygwin的单机上可用的基本shell工具。$awk'NR>1{if(/blah24/)sub(/unknown/,“test”,prev);print prev}{prev=$0}END{print pre

我有一个html文件,其中有一个表,如下所示:

未知
废话11
...
未知的
胡说八道
…

我需要匹配“blah24”,并将上面的“未知”替换为“测试”,以给出:

测试
blah24

我曾尝试研究sed和awk解决方案,但只能找到“匹配模式之前的插入”或“匹配模式之后的替换”

我只有使用cygwin的单机上可用的基本shell工具。

$awk'NR>1{if(/blah24/)sub(/unknown/,“test”,prev);print prev}{prev=$0}END{print prev}文件
$ awk 'NR>1{if(/blah24/) sub(/unknown/,"test",prev); print prev} {prev=$0} END{print prev}' file
<td>unknown</td>
<td>blah11</td>
...
<td>test</td>
<td>blah24</td>
...
未知的 废话11 ... 测试 胡说八道 ... 如果
blah24
作为较长字符串的一部分出现,或者如果您真的想专门替换
unknown
或者标签中的任何内容或各种其他重要细节,您没有告诉我们该怎么做,但希望您能在上述情况下解决所有问题。

$awk'NR>1{if(/blah24/)sub(/unknown/,“test”,prev);print prev}{prev=$0}END{print prev}'文件 未知的 废话11 ... 测试 胡说八道 ... 如果
blah24
作为较长字符串的一部分出现,或者如果您真的想专门替换
unknown
或者标签中的任何内容或各种其他重要细节,您没有告诉我们该怎么做,但希望您能在上述情况下解决所有问题。

$awk'NR>1{if(/blah24/)sub(/unknown/,“test”,prev);print prev}{prev=$0}END{print prev}'文件 未知的 废话11 ... 测试 胡说八道 ... 如果
blah24
作为较长字符串的一部分出现,或者如果您真的想专门替换
unknown
或者标签中的任何内容或各种其他重要细节,您没有告诉我们该怎么做,但希望您能在上述情况下解决所有问题。

$awk'NR>1{if(/blah24/)sub(/unknown/,“test”,prev);print prev}{prev=$0}END{print prev}'文件 未知的 废话11 ... 测试 胡说八道 ... 如果
blah24
作为较长字符串的一部分出现,或者如果您确实想替换
unknown
或标签中的任何内容或各种其他重要细节,您没有告诉我们该怎么做,但希望您能在上述情况下解决所有问题。

在sed中,您可以这样做

sed -n '/blah24/{x;s/unknown/test/;x};x;1!p;${x;p}' file

<td>unknown</td>
<td>blah11</td>
...
<td>test</td>
<td>blah24</td>
...
sed-n'/blah24/{x;s/unknown/test/;x};x;1.p${x;p}'文件
未知的
废话11
...
测试
胡说八道
...
它的每一行都将当前行交换为保持缓冲区。如果找到blah24,则交换保留的行,将其更改为test,然后将其交换回。它会打印除1之外的每一行(就像打印空白一样)。

在sed中,您可以这样做

sed -n '/blah24/{x;s/unknown/test/;x};x;1!p;${x;p}' file

<td>unknown</td>
<td>blah11</td>
...
<td>test</td>
<td>blah24</td>
...
sed-n'/blah24/{x;s/unknown/test/;x};x;1.p${x;p}'文件
未知的
废话11
...
测试
胡说八道
...
它的每一行都将当前行交换为保持缓冲区。如果找到blah24,则交换保留的行,将其更改为test,然后将其交换回。它会打印除1之外的每一行(就像打印空白一样)。

在sed中,您可以这样做

sed -n '/blah24/{x;s/unknown/test/;x};x;1!p;${x;p}' file

<td>unknown</td>
<td>blah11</td>
...
<td>test</td>
<td>blah24</td>
...
sed-n'/blah24/{x;s/unknown/test/;x};x;1.p${x;p}'文件
未知的
废话11
...
测试
胡说八道
...
它的每一行都将当前行交换为保持缓冲区。如果找到blah24,则交换保留的行,将其更改为test,然后将其交换回。它会打印除1之外的每一行(就像打印空白一样)。

在sed中,您可以这样做

sed -n '/blah24/{x;s/unknown/test/;x};x;1!p;${x;p}' file

<td>unknown</td>
<td>blah11</td>
...
<td>test</td>
<td>blah24</td>
...
sed-n'/blah24/{x;s/unknown/test/;x};x;1.p${x;p}'文件
未知的
废话11
...
测试
胡说八道
...

它的每一行都将当前行交换为保持缓冲区。如果找到blah24,则交换保留的行,将其更改为test,然后将其交换回。它会打印除1之外的每一行(因为它会打印空白)。

感谢您的快速回复
blah24
将是该html文件中的唯一ID。我想特别替换总是出现在唯一ID上方的
unknown
,并将内容写回原始文件。好的,但是
blah241
fooblah24
是否也存在于文件中?怎么样
foouknownbar
?如果是的话,你想用这些做什么?使用任何UNIX命令写回原始文件是
cmd file>tmp&&mv tmp file
。GNU sed有一个
-i
选项,GNU awk有
-i选项,但是他们在幕后都做了同样的事情。很好,我提出了几乎相同的逻辑,但在sed中+1:)谢谢你的快速回复
blah24
将是该html文件中的唯一ID。我想特别替换总是出现在唯一ID上方的
unknown
,并将内容写回原始文件。好的,但是
blah241
fooblah24
是否也存在于文件中?怎么样
foouknownbar
?如果是的话,你想用这些做什么?使用任何UNIX命令写回原始文件是
cmd file>tmp&&mv tmp file
。GNU sed有一个
-i
选项,GNU awk有
-i选项,但是他们在幕后都做了同样的事情。很好,我提出了几乎相同的逻辑,但在sed中+1:)谢谢你的快速回复
blah24
将是该html文件中的唯一ID。我想特别替换总是出现在唯一ID上方的
unknown
,并将内容写回原始文件。好的,但是
blah241
fooblah24
是否也存在于文件中?怎么样
foouknownbar
?如果是的话,你想用这些做什么?使用任何UNIX命令写回原始文件是
cmd file>tmp&&mv tmp file
。GNU sed有一个
-i
选项,GNU awk有
-i选项,但是他们在幕后都做了同样的事情。很好,我提出了几乎相同的逻辑,但在sed中+1:)谢谢你的快速回复
blah24
将是该html文件中的唯一ID。我想特别替换
未知