在同一行上查找所有字符串

在同一行上查找所有字符串

尝试找到一种方法来在一行上 grep 100 个文件的所有名称。每个文件中可用的所有名称都必须出现在同一行上。

文件1

"company":"COMPANY1","companyDisplayName":"CM1","company":"COMPANY2","companyDisplayName":"CM2","company":"COMPANY3","companyDisplayName":"CM3",

文件2

"company":"COMPANY99","companyDisplayName":"CM99"

我真正想要的输出是(包括文件名作为前缀。)

FILE1:COMPANY1,COMPANY2,COMPANY3    
FILE2:COMPANY99

我试过了grep -oP '(?<="company":")[^"]*' *但得到的结果如下:

FILE1:COMPANY1
FILE1:COMPANY2
FILE1:COMPANY3
FILE2:COMPANY99

答案1

既然您已经在使用与 Perl 兼容的正则表达式 (PCRE),为什么不使用 Perl 本身呢?

$ perl -0777 -lnE 'say "$ARGV:", join ",", /(?<="company":")[^"]*/g' FILE*
FILE1:COMPANY1,COMPANY2,COMPANY3
FILE2:COMPANY99

如果每个文件只包含一行,则可以省略-0777“slurp”。

相关内容