如何 grep 包含多个关键字的行并将其转换为 csv

如何 grep 包含多个关键字的行并将其转换为 csv

使用此命令:

cmd param | grep 'foo1\|foo5\|foo7'

我明白了

foo1=bar1
foo5=bar5
foo7=bar7

我如何将这个输出写入 csv 文件?

最终,我想在循环中运行该命令,并且每次循环时参数都会改变(因此输出),因此如果文件变成如下形式将会很有帮助:

cat output.csv
    foo1=bar1, foo5=bar5, foo7=bar7
    foo1=value, foo5=value, foo7=value

答案1

这是另一句单行代码:

echo $(cmd param | grep 'foo1\|foo5\|foo7') | sed 's/ /, /g' | tee -a output.csv

该命令:echo $(cmd param | grep 'foo1\|foo5\|foo7')将以线性形式打印输出。

在变量之间放置一个逗号:sed 's/ /, /g'

将输出附加到文件末尾的新行:tee -a output.csv

答案2

这对你有用吗:

cmd param | grep 'foo1\|foo5\|foo7' | tr '\n' ',' | sed 's/,$//'
  • tr '\n' ','用 ',' 替换每一行回车符
  • sed 's/,$//'如果最后一个字符是“,”则删除

如果您想将其放入 csv 文件中,您可以在行末尾添加 '\n',然后将其重定向到 csv 文件:

cmd param | grep 'foo1\|foo5\|foo7' | tr '\n' ',' | sed 's/,\?$/\n/' >> file.csv
  • sed 's/,\?$/\n/'如果最后一个字符是 ',',则删除它,并添加 '\n'
  • >>用于在 csv 文件末尾添加内容,而不删除其中已有的内容

答案3

使用 Perl 您可以获取模式、加入模式并将其打印到所有所需的文件中:

perl -0nE 'say join(",",/(foo\d+=\w+)/g)' ex* > out

这将避免你的外部循环

相关内容