我有以下字符串正在尝试搜索:
<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>
这将匹配 a 与可选的 ) 和标记之间的任意数量的空格。不过我不确定,它是否是您真正要找的字符串?
但是,它的要点是使用 \s 作为空格的字符类,包括换行符。