我正在尝试编写一个命令来捕获 linux 操作系统(kali)中的每个许可证并将其与正确的包关联起来。基本思想是,您递归地搜索 /usr/share/doc 中的“版权”文件,然后对其进行搜索并搜索“^License”领先许可证。每个包可以有多个。
我正在尝试创建一个 csv,它获取所有包名称并将它们放入每行的第一个字段中,然后用每个许可证逗号分隔。
我的基本流程:列出每个包裹(完成)。制作一个列表,其中每行都是找到的许可证的 csv。然后只需粘贴文件1和文件2即可,boom。
问题,我必须用逗号交换命令输出中的换行符,但我需要在 xargs 的每次迭代末尾重新插入换行符,以便我的 csv 许可证与包列表对齐。我已经尝试了几十种方法。当我进行命令替换时,它会破坏翻译或回显(不再读取\n
为换行符。我已经尝试过\\n
,但没有运气)。
这是我所拥有的,只需要一种在每个 xargs 周期放置换行符的方法。
find . -name copyright |xargs -l cat |grep "^License" |tr '\n' ','
因此,如果我可以通过管道传输到每个 xarg 循环后插入的内容,\n
我就完成了。我知道我可以用变量为此编写一个 for 循环。
答案1
如果您对 awk 没问题,请尝试以下解决方案:
find $PWD -name copyright | xargs awk 'BEGIN{ORS=","} FNR==1{print "\n"FILENAME}; $0 ~ /^License/ {print $0}' | sed 's/,$//g' |awk -F',' 'NF>1'