Perl One Liner使用正则表达式替代

时间:2020-08-26 21:12:57

标签: regex perl

我有一个看起来像这样的文件:

7th Aug 2020 10:18:35 am Bill Smith:
NW: RE: Matt Reid - EUC23284 - INC1020721599
7th Aug 2020 10:22:02 am Bill Smith:
VK: RE: don't think we send the price, pls help check what happened - INC1020721668
7th Aug 2020 11:00:06 am Bill Smith:
*mailbox handover*
7th Aug 2020 11:06:04 am Tom Jones:
BJ - RE: Megan Holleran Unmatched Trader Trades 08/06/2020 17:35 [Restricted - External] INC1020722335
7th Aug 2020 11:07:37 am Tom Jones:
DS - RE: All summit books missing from multiple reports in ICE INC1020722348
7th Aug 2020 12:36:10 pm Tom Jones:
NW - confirm trade receipt for Jon Lett from GFI ID: 1922979 INC1020723352

我希望它看起来像这样:

7th Aug 2020 10:18:35 am Bill Smith: NW: RE: Matt Reid - EUC23284 - INC1020721599
7th Aug 2020 10:22:02 am Bill Smith: VK: RE: don't think we send the price, pls help check what happened - INC1020721668
7th Aug 2020 11:00:06 am Bill Smith: *mailbox handover*
7th Aug 2020 11:06:04 am Tom Jones: BJ - RE: Megan Holleran Unmatched Trader Trades 08/06/2020 17:35 [Restricted - External] INC1020722335
7th Aug 2020 11:07:37 am Tom Jones: DS - RE: All summit books missing from multiple reports in ICE INC1020722348
7th Aug 2020 12:36:10 pm Tom Jones: NW - confirm trade receipt for Jon Lett from GFI ID: 1922979 INC1020723352

因此,我在文件上运行此命令,目标是从人名结尾的字符串中删除新行,后跟冒号。我想将“比尔·史密斯:\ n”和“汤姆·琼斯:\ n”更改为“比尔·史密斯:”和汤姆·琼斯:“。”如果您查看一个衬板,则该衬管不能用于替换

cat incfile | perl -p -e 's/\w+\s\w+\:\n/\w+\s\w+\:/g'

7th Aug 2020 10:18:35 am w+sw+:NW: RE: Matt Reid - EUC23284 - INC1020721599
7th Aug 2020 10:22:02 am w+sw+:VK: RE: don't think we send the price, pls help check what happened - INC1020721668
7th Aug 2020 11:00:06 am w+sw+:*mailbox handover*
7th Aug 2020 11:06:04 am w+sw+:BJ - RE: Megan Holleran Unmatched Trader Trades 08/06/2020 17:35 [Restricted - External] INC1020722335
7th Aug 2020 11:07:37 am w+sw+:DS - RE: All summit books missing from multiple reports in ICE INC1020722348
7th Aug 2020 12:36:10 pm w+sw+:NW - confirm trade receipt for Jon Lett from GFI ID: 1922979 INC1020723352

1 个答案:

答案 0 :(得分:3)

你要去

perl -pe's/(\w+\s\w+:)\n/$1 /'

与第一个捕获(())匹配的子字符串已分配给$1,您可以在替换表达式中使用它。


以上内容可以简化/优化为

perl -pe's/\w+\s\w+:\K\n/ /'

\K之前匹配的内容是“保留”(未替换),因此仅换行符被替换(带有空格)。


或者,您可以简单地替换奇数行的换行符。

perl -pe's/\n/ / if $. % 2'
相关问题