首页 > 解决方案 > 使用 sed 进行多行搜索和替换的正则表达式

问题描述

我需要有一个正则表达式,它\n在一行中间找到一个作为起点,之前的任何内容都是随机的,并在第二行的 15 位数字和 49 alpha 之后替换。我需要用空白替换所有这些,但第二行需要与第一行连接。

试图

sed -r -e '{N;s/\n[[:digit:]]{15}[[:space:]]{49}//}'

输入

QC HOH 0H0 CA
:70:NOFX TRADE TR
100000100200621                                                 ADE RELATED WOOD                                                                                         PURCHASE

记录截图

需要删除的是 TRADE TR 之后的换行并将 ADE RELATED 带到 TR 中,因此它拼写为 TRADE。

期望的输出

QC H0H 0H0 CA
:70:NOFX TRADE TRADE RELATED WOOD                                                                                         PURCHASE

标签: regexunixsedksh

解决方案


这可能对您有用(GNU sed):

sed -E 'N;s/\n[[:digit:]]{15}[[:space:]]{49}//;P;D' file

如果替换命令匹配,这将打开一个两行窗口并修改其中的第二个。它总是打印两行中的第一行,然后将其删除。


推荐阅读