Usando sed
$ printf "%s\n" * | sed 's/.csv$//; s/_/\t/g'
abc q1 w1
defg q11 w2
hijk q11 w3
Como funciona:
-
printf "%s\n" *
imprime os nomes dos arquivos um por linha -
s/.csv$//
remove o.csv
. -
s/_/\t/g
converte_
em guias.
Usando o bash
$ for f in *; do f="${f%.csv}"; printf "%s\n" "${f//_/$'\t'}"; done
abc q1 w1
defg q11 w2
hijk q11 w3
Se ajudar com clareza, o código acima pode ser dividido em várias linhas:
for f in *
do
f="${f%.csv}"
printf "%s\n" "${f//_/$'\t'}"
done
${f%.csv}
remove os .csv
e ${f//_/$'\t'}
restantes convertem todos os _
em guias.
Não usamos echo
para essa tarefa porque, se um dos nomes de arquivo começar com -
, muitos shells tentariam interpretar esse nome de arquivo como uma opção e o resultado não seria bom.
Executando o código de um diretório diferente
$ for f in "$dir"/*; do f="${f#$dir/}"; f="${f%.csv}"; printf "%s\n" "${f//_/$'\t'}"; done
abc q1 w1
defg q11 w2
hijk q11 w3