使用 sed 进行多行搜索和替换的 RegEx

RegEx for a multiple line search and replace using sed

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

尝试

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

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

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

这会打开两行 window 并在替换命令匹配时修改其中的第二行。它总是打印两行中的第一行,然后将其删除。

使用 GNU sed:

$ sed -Ez 's/\n[[:digit:]]{15}[[:space:]]{49}//' file
QC J0B 2Y0 CA
:70:NOFX TRADE TRADE RELATED WOOD                                                                                         PURCHASE