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/gconverte_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