相关疑难解决方法(0)

Linux命令用另一个字符串替换LARGE文件中的字符串

我有一个巨大的SQL文件,可以在服务器上执行.转储来自我的机器,其中有一些与我的机器相关的设置.所以基本上,我希望每一次出现"c://temp"都被替换"//home//some//blah"

如何从命令行完成?

linux perl awk command-line sed

8
推荐指数
2
解决办法
2万
查看次数

使用正则表达式读入文件?

这与我早先的一个问题相关.

从本质上讲,该问题的解决方案效果很好,但现在我需要使其适应更大的分析应用程序.简单地使用StreamReader.ReadToEnd()是不可接受的,因为我将要阅读的一些文件非常非常大.如果出现了错误并且有人忘记清理,理论上它们可能是千兆字节.显然,我不能只读到最后.

不幸的是,正常的读取行也是不可接受的,因为我读入的一些数据行包含堆栈跟踪 - 它们显然/r/n在它们的格式化中使用.理想情况下,我想告诉程序向前读取,直到匹配正则表达式,然后返回.在.net中有任何功能吗?如果没有,我可以就如何编写它获得一些建议吗?

编辑:为了更容易理解我的问题,这里贴了一些改编代码的重要部分:

foreach (var fileString in logpath.Select(log => new StreamReader(log)).Select(fileStream => fileStream.ReadToEnd()))
{
    const string junkPattern = @"\[(?<junk>[0-9]*)\] \((?<userid>.{0,32})\)";
    const string severityPattern = @"INFO|ERROR|FATAL";
    const string datePattern = "^(?=[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2},[0-9]{3})";
    var records = Regex.Split(fileString, datePattern, RegexOptions.Multiline);
    foreach (var record in records.Where(x => string.IsNullOrEmpty(x) == false))
    ......
Run Code Online (Sandbox Code Playgroud)

问题在于Foreach. .Select(fileStream => fileStream.ReadToEnd())会严重炸掉记忆,我才知道.

.net c# regex streamreader

5
推荐指数
1
解决办法
2034
查看次数

标签 统计

.net ×1

awk ×1

c# ×1

command-line ×1

linux ×1

perl ×1

regex ×1

sed ×1

streamreader ×1