正则表达式是一个带有可变空格和换行符的字符串

时间:2013-10-23 10:36:33

标签: regex bash sed

我正在尝试搜索以下字符串:

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

除了换行符之外,</td><td>之间可以有任意数量的空格。总会有一个换行符,但只是忽略所有空格(包括换行符)的表达式都没问题。

我正在尝试弄清楚如何使用此信息执行字符串替换,而不会折叠文件中的所有空格。我发现很多解决方案都有一个处理空格的表达式,但我也没有能够使用换行符。

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

2 个答案:

答案 0 :(得分:1)

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

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

请注意sed通常不支持多行匹配,因此您需要使用标签并在执行替换之前将下一行附加到当前行(有关完整说明,请参阅here) :

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

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

答案 1 :(得分:0)

<td>\s*?\)?\s*?</td>

这将匹配a与可选项)以及标记之间的任意数量的空格。 我不确定,这是否是你真正想要的字符串?

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