Precisa capturar parte do nome do arquivo na variável

0

Eu tenho muitos arquivos CSV com nomes assim em um diretório:

 s_m_u_supplemental_fields_account_9_4_2015_11_26_Error.csv
 s_m_u_supplemental_fields_account_9_4_2015_12_3_Error.csv
 s_m_u_academic_status_loa_8_29_2015_0_1_Error.csv

Eu preciso capturar a parte "s_m_u_academic_status_loa" para anexar a uma coluna dentro do arquivo. Testei a expressão "s/^\(s_([^_0-9]+_)+\)\([^\.]+\.csv\)$//" no RegEx Tester on-line e capture o que preciso, mas, por algum motivo, ela não funciona no AIX ksh.

Aqui está o meu script até agora (AIX 6.2):

#!/bin/ksh

ls *_Error.csv | while read i
do
    echo ${i}
    edfilename = 'echo ${i} |sed -e "s/^\(s_([^_0-9]+_)+\)\([^\.]+\.csv\)$//"'
    echo ${edfilename}
done
    
por sleepy bubba 07.09.2015 / 20:43

1 resposta

1

Você pode tentar esta versão do seu script até agora

#!/bin/ksh
ls *_Error.csv | while read i
do  echo "${i}"
    edfilename=$(echo "${i}" | sed -e 's/^\(s_([^_0-9]*_)*\)\([^\.]*\.csv\)$//')
    echo "${edfilename}"
done

Eu não acho que o aix sed entenda + , então eu os substitui por * . E se você realmente precisa de + , então use \{1,\} , que pode funcionar no aix.

Um padrão mais simples que deve ser suficiente: 's/\([^0-9]*\)_.*//'

    
por 07.09.2015 / 21:23