RegEx用于多行搜索并使用sed替换

问题描述 投票:1回答:2

我需要一个RegEx,它在一条线的中间找到一个\n作为一个起点,之前的任何东西都是随机的,并在第二行的15位和49 alpha后替换。我需要用空格替换所有这些,但第二行需要与第一行连接。

Attempt

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

Input

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

Screen shot of record

需要删除的是交易TR之后的换行并将ADE RELATED带到TR以便它拼写交易。

Desired Output

QC H0H 0H0 CA
:70:NOFX TRADE TRADE RELATED WOOD                                                                                         PURCHASE
regex unix sed ksh
2个回答
2
投票

这可能适合你(GNU sed):

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

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


1
投票

使用GNU sed:

$ sed -Ez 's/\n[[:digit:]]{15}[[:space:]]{49}//' file
QC J0B 2Y0 CA
:70:NOFX TRADE TRADE RELATED WOOD                                                                                         PURCHASE
© www.soinside.com 2019 - 2024. All rights reserved.