[英]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.