我正在尝试搜索以下字符串:
<td></td>
<td>)</td>
除了换行符之外,</td>
和<td>
之间可以有任意数量的空格。总会有一个换行符,但只是忽略所有空格(包括换行符)的表达式都没问题。
我正在尝试弄清楚如何使用此信息执行字符串替换,而不会折叠文件中的所有空格。我发现很多解决方案都有一个处理空格的表达式,但我也没有能够使用换行符。
我的正则表达式经验有限。我应该如何从bash shell环境中解决这个问题?
答案 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 作为空格的字符类,包含换行符。