我有一个包含一堆文件名的文件:
$ 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 一样,您可以使用basename
和dirname
命令:
$ 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