我有一个html文件,里面有一个表格如下:
<td>unknown</td>
<td>blah11</td>
...
<td>unknown</td>
<td>blah24</td>
...
我需要匹配'blah24'并将上面的'unknown'替换为'test'来给出:
<td>test</td>
<td>blah24</td>
我试图研究sed&amp; awk解决方案,但只能找到“在匹配模式之前插入”或“在匹配模式之后替换”。
我只在使用cygwin的独立机器上提供了基本的shell工具。
答案 0 :(得分:2)
$ 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>
...
如果blah24
作为较长字符串的一部分出现,或者您确实想要专门替换unknown
或标签内的任何内容或其他各种重要细节,那么您没有告诉我们该怎么办但希望你能解决上述问题。
答案 1 :(得分: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>
...
每一行都交换保持缓冲区的当前行。如果它找到了blah24,那么它会交换保持的行,将其更改为test,然后将其交换回来。它打印除1之外的每一行(因为它会打印一个空格)。