尝试找到一种方法来在一行上 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”。