【问题标题】:How do I extract specific strings from multiple files and write them to .txt in bash?如何从多个文件中提取特定字符串并将它们写入 bash 中的 .txt?
【发布时间】:2022-11-13 09:43:09
【问题描述】:

我在filesToCheck 文件夹中有很多文件,下面给出了一些示例。我需要输出result.txt,如下所示。我可以将 linux bash 与任何不需要额外安装的命令一起使用。

下面的试用(在 stackoverflow 的帮助下)在我执行时有两个问题。尽管有全局标志g,但它只查找CAKE_FROSTING 的一个实例,尽管> result.txt,文件result.txt 仍然为空。

sed -Enz 's/.*CAKE_FROSTING\(\n?"([^"]*).*/\1\n/gp' filesToCheck/* > result.txt

我需要改变什么?


文件1.cpp

something
CAKE_FROSTING("is.simply.the.best", "[no][matter][what]") { DO(something(0) == 1); }

文件2.h

something else
CAKE_FROSTING(
"is.kinda.neat", 
"[i][agree]") something else
something more

文件 3.cpp

random_text CAKE_FROSTING("Can be nice") "more random text"

CAKE_CREAM("totally.sucks", "[trust][me]")
random_text CAKE_FROSTING("Can be very nice") "indeed"

期望结果.txt

is.simply.the.best
is.kinda.neat
Can be nice
Can be very nice

currentResult 命令行输出:

is.simply.the.best
is.kinda.neat
Can be nice

【问题讨论】:

    标签: linux bash sed scripting


    【解决方案1】:

    假设字符串CAKE_FROSTING 每行出现一次,你可以试试这个sed

    $ sed -En ':a;N;s/.*CAKE_FROSTING(
    ?"([^"]*).*//p;ba' filesToCheck/*
    is.simply.the.best
    is.kinda.neat
    Can be nice
    Can be very nice
    

    【讨论】:

    • 谢谢,这行得通。我还设法使用 > result.txt 将输出写入文件,它仅在没有预先存在的文件 result.txt 时对我有效,我不知道。
    猜你喜欢
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 2017-04-04
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多