繁体   English   中英

使用Linux Shell命令,如何将通过管道流馈送的文件列表编辑为CSV格式?

[英]With Linux shell commands, how can I edit a list of files fed through a pipestream into a CSV format?

使用Linux Shell命令,如何递归搜索目录并将文件列表输出到包含两个值的CSV文件中; 路径和文件?

例如,假设我具有以下文件结构…

home/readme.txt.
home/web/fruit/grapes.pdf
home/web/animals/mammals/bears.gif

我想要一个带有输出的CSV文件…

home,readme.txt
home/web/fruit,grapes.pdf
home/web/animals/mammals,bears.gif

到目前为止,最接近的就是使用命令:

 find home -type f | sed ‘s/\//,/g’

但这并不完全正确,因为上述命令最终将所有正斜杠替换为逗号,而不仅仅是最后一个。

有人对我该怎么做有任何想法吗?

作为参考,我使用的是Redhat Enterprise Linux服务器。

提前致谢!

您可以使用sed 正则表达式是贪婪的这个工具,它将替换字符的最后一次出现/通过,

sed 's#\(.*\)/\(.*\)#\1,\2#' file

如果您需要对目录中的所有文件执行此操作,请使用以下命令:

find -type f -exec sed 's#\(.*\)/\(.*\)#\1,\2#' {} \;

您正在寻找以/结尾的最长前缀,可以找到.*\\/ 然后,您想使用该前缀,可以使用\\(.*\\)\\/捕获并使用\\1重放。

因此,将您的sed更新为sed 's/\\(.*\\)\\//\\1,/'

赠送:

find home -type f | sed 's/\(.*\)\//\1,/'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM