我有以下要搜索的字符串:
<td></td>
<td>)</td>
</td>
换行符和<td>
换行符之间可以有任意数量的空格。总是只有一个换行符,但是一个简单地忽略所有空格(包括换行符)的表达式就可以了。
我试图弄清楚如何使用此信息执行字符串替换,而不会折叠文件中的所有空白。我发现许多解决方案都带有处理空格的表达式,但我也无法使用换行符进行处理。
我的正则表达式经验有限。我应该如何从 bash shell 环境中解决这个问题?
如果我理解正确,您正在尝试匹配一个空<td>
标签对,后跟一个换行符和一个<td>
标签对,其中包含一个右括号(第一个</td>
和/或第二个之前有任意数量的空格<td>
)。如果正确,请尝试以下表达式:
<td></td> *\n *<td>)</td>
请注意,sed
通常不支持多行匹配,因此您需要使用标签并将下一行附加到当前行,然后再进行替换(完整说明请参见此处):
sed ':a;N;$!ba;s|<td></td> *\n *<td>)</td>|...|g' infile >outfile
将省略号 ( ...
) 替换为您的实际替换文本。
<td>\s*?\)?\s*?</td>
这将匹配一个可选的 ) 和标签之间的任意数量的空格。不过,我不确定,它是否是您真正要查找的字符串?
但是,它的要点是使用\s作为空格的字符类,包括换行符。