处理文件名列表以分割目录和基本名称

处理文件名列表以分割目录和基本名称

我有一个包含一堆文件名的文件:

$ cat test_as1
/var/incoming/foo.txt
/var/incoming/bar.txt
/var/incoming/baz.txt

对于每个文件名,我想打印目录名称和基本文件名,以逗号分隔。例如:

/var/incoming,foo.txt
/var/incoming,bar.txt
/var/incoming,baz.txt

我怎样才能做到这一点?

答案1

您可以循环遍历文件,然后使用参数扩展打印最后一个斜杠之前和之后的部分:

while IFS= read -r line; do
    printf '%s,%s\n' "${line%/*}" "${line##*/}"
done < test_as1

"${line%/*}"/*从行尾删除最短的匹配项,并从行首"${line##*/}"删除最长的匹配项。*/

答案2

就像上面评论中提到的 @hhoke1 一样,您可以使用basenamedirname命令:

$ basename /var/incoming/new_items.txt
new_items.txt

$ dirname /var/incoming/new_items.txt
/var/incoming

答案3

你的意思是这样的吗?

sed -e 's/\(.*\)\//\1,/' -i /var/incoming/new_item.txt

相关内容