在正则表达式匹配非常大的文件而没有换行符后,Linux添加新行

时间:2015-10-30 09:34:27

标签: regex linux

我有一个大Sub AttachmentDownload() Const olFolderInbox As Integer = 6 '~~> Path for the attachment Const AttachmentPath As String = "C:\TEMP\TestExcel" Dim oOlAp As Object Dim oOlns As Object Dim oOlInb As Object Dim oOlItm As Object Dim oOlAtch As Object Dim NewFileName As String NewFileName = "Daily Tracker " & Format(Now, "dd/MM/yyyy") Set oOlAp = GetObject(, "Outlook.application") Set oOlns = oOlAp.GetNamespace("MAPI") Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox) For Each oOlItm In oOlInb.Items If InStr(oOlItm.Subject, NewFilename)) <> 0 Then ElseIf oOlItm.Attachments.Count <> 0 Then For Each oOlAtch In oOlItm.Attachments oOlAtch.SaveAsFile (AttachmentPath) Exit For Next Else MsgBox "No attachments found" End If Exit For Next End Sub 大的文件,不幸的是它没有任何换行符。

幸运的是,很容易找到我希望插入换行符的位置,这是在以下正则表达式之后:

~5.1GB

匹配\{(.*?)\}{内的所有内容。

我尝试使用grep查找与上述匹配的输出但是我收到以下错误:

}

因为它试图将完整的5GB线加载到内存中。有没有办法处理它而不将其加载到内存中并在每次正则表达式匹配后附加一个新行?

我在Linux方面不是很有经验,作为参考,这将在Amazon Linux EC2实例上运行。

1 个答案:

答案 0 :(得分:2)

使用sed的内联替换:

sed -i 's/{[^}]*}/&\n/g' file

-i选项指定文件应该就地编辑。

脚本's/{[^}]*}/&\n/g'说明s出现{[^}]*} &\n&(其中g表示匹配的字符串本身)file<?php $a = 'www.mydomain.com/product/$ID_PRODUCT$/ID_$ID_PRODUCT$'; echo preg_replace('/[$][a-zA-Z_]+[$]/',"1234",$a);