根据目录名称对正则表达式输出进行分组

时间:2017-05-19 19:26:44

标签: regex bash scripting grep

我正在尝试编写一个bash脚本,以便在此文件上应用正则表达式。

somedir1/include/log.h:65:inline void ERROR(int, const std::string&)      {}
somedir1/common/packet.cpp:68:        ERROR(1, "File couldn't be opened");
anotherdir2/core/client.cpp:380:    ERROR(error, "Connection error");
otherdir3/src/client.cpp:534:            ERROR(1, "Wrong command");

但是,我无法将目录名称作为变量收集。

我拥有的最后一个稳定的正则表达式材料是:

 [^,]*\/[^,]*:[0-9]*:[^,].*\n
#[^,]--->This one is the one I am interested in.

我的目标是将共享同一父目录的条目分组到同一文件中。例如;

fileName:   report_somedir1 
content:    somedir1/include/log.h:65:inline void ERROR(int, const std::string&)      {}
content:    somedir1/common/packet.cpp:68:        ERROR(1, "File couldn't be opened");

将第一个模式存储为变量的正确方法是什么? 感谢您的时间和耐心。

1 个答案:

答案 0 :(得分:2)

试试这个:

//Modified code
public string Enventory_4_0ConnectionString {
            get {
                return (System.Configuration.ConfigurationManager.ConnectionStrings["Enventory_4_0ConnectionString"].ConnectionString);
            }
        }

上述命令将导致创建三个文件:

awk -F/ '$1 != d{close(f); d=$1; f="report_"d} {print >>f}' file

$ cat report_somedir1 
somedir1/include/log.h:65:inline void ERROR(int, const std::string&)      {}
somedir1/common/packet.cpp:68:        ERROR(1, "File couldn't be opened");

$ cat report_anotherdir2 
anotherdir2/core/client.cpp:380:    ERROR(error, "Connection error");

如何运作

  • $ cat report_otherdir3 otherdir3/src/client.cpp:534: ERROR(1, "Wrong command");

    这会将字段分隔符设置为-F/。这样,第一个字段就是目录。

  • /

    如果当前行的第一个字段与上一个字段不同,则关闭旧文件,更新变量$1 != d{close(f); d=$1; f="report_"d}并创建新文件名d

  • f

    将当前行打印到文件print >>f