1

我有以下要搜索的字符串:

<td></td>
<td>)</td>

</td>换行符和<td>换行符之间可以有任意数量的空格。总是只有一个换行符,但是一个简单地忽略所有空格(包括换行符)的表达式就可以了。

我试图弄清楚如何使用此信息执行字符串替换,而不会折叠文件中的所有空白。我发现许多解决方案都带有处理空格的表达式,但我也无法使用换行符进行处理。

我的正则表达式经验有限。我应该如何从 bash shell 环境中解决这个问题?

4

2 回答 2

2

如果我理解正确,您正在尝试匹配一个空<td>标签对,后跟一个换行符和一个<td>标签对,其中包含一个右括号(第一个</td>和/或第二个之前有任意数量的空格<td>)。如果正确,请尝试以下表达式:

<td></td> *\n *<td>)</td>

请注意,sed通常不支持多行匹配,因此您需要使用标签并将下一行附加到当前行,然后再进行替换(完整说明请参见此处):

sed ':a;N;$!ba;s|<td></td> *\n *<td>)</td>|...|g' infile >outfile

将省略号 ( ...) 替换为您的实际替换文本。

于 2013-10-23T11:32:01.920 回答
0
<td>\s*?\)?\s*?</td>

这将匹配一个可选的 ) 和标签之间的任意数量的空格。不过,我不确定,它是否是您真正要查找的字符串?

但是,它的要点是使用\s作为空格的字符类,包括换行符。

于 2013-10-23T10:47:57.153 回答