使用此命令:
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
这将避免你的外部循环