Como @ hhoke1 mencionado em um comentário acima, você pode usar os comandos basename
e dirname
:
$ basename /var/incoming/new_items.txt
new_items.txt
$ dirname /var/incoming/new_items.txt
/var/incoming
Eu tenho um arquivo contendo um monte de nomes de arquivos:
$ cat test_as1
/var/incoming/foo.txt
/var/incoming/bar.txt
/var/incoming/baz.txt
Para cada nome de arquivo, desejo imprimir o nome do diretório e o nome do arquivo base, separados por vírgulas. Por exemplo:
/var/incoming,foo.txt
/var/incoming,bar.txt
/var/incoming,baz.txt
Como posso fazer isso?
Como @ hhoke1 mencionado em um comentário acima, você pode usar os comandos basename
e dirname
:
$ basename /var/incoming/new_items.txt
new_items.txt
$ dirname /var/incoming/new_items.txt
/var/incoming
Você quer dizer algo assim?
sed -e 's/\(.*\)\//,/' -i /var/incoming/new_item.txt
Você pode percorrer o arquivo e imprimir as partes antes e depois da última barra com a expansão de parâmetros:
while IFS= read -r line; do
printf '%s,%s\n' "${line%/*}" "${line##*/}"
done < test_as1
"${line%/*}"
remove a correspondência mais curta de /*
do final da linha e "${line##*/}"
remove a correspondência mais longa de */
do início da linha.