Gostaria de perguntar sobre como extrair strings específicas de um arquivo usando sed e expressões regulares.
Abaixo está o exemplo do arquivo de texto de entrada (testfile.txt):
# This file contains a short description of the columns in the
# meta-analysis summary file, named '/some/output/directory/result.txt'
# (Skipping some comment lines...)
# Input for this meta-analysis was stored in the files:
# --> Input File 1 : /some/input/directory/cohort1/dataset1_chrAll.regenie.txt
# --> Input File 2 : /some/input/directory/cohort2/subdir1/chrAll-out.txt
# --> Input File 3 : /some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
# --> Input File 4 : /some/input/directory/cohort3/resfile.txt
# --> Input File 5 : /some/input/directory/cohort4/regenie_res_chrAll.txt
Deste arquivo, gostaria de extrair a lista de nomes de arquivos de entrada, então o resultado deve ser algo como:
/some/input/directory/cohort1/dataset1_chrAll.regenie.txt
/some/input/directory/cohort2/subdir1/chrAll-out.txt
/some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
/some/input/directory/cohort3/resfile.txt
/some/input/directory/cohort4/regenie_res_chrAll.txt
Veja abaixo o que eu tentei:
Tentativa 1
Este é o comando inicial que usei.
cat testfile.txt | sed -e 's/\/some\/input\/directory\/([A-z0-9\/\.\-]*)\.txt/$1/g'
Resultado:
sed: -e expression #1, char 55: Invalid range end
Tentativa 2
Depois de alguma pesquisa, tentei escapar dos parênteses usando barras invertidas.
cat testfile.txt | sed -e 's/\/some\/input\/directory\/\([A-z0-9\/\.\-]*\).txt/$1/g'
Resultado:
sed: -e expression #1, char 56: Invalid range end
Então isso não resolveu o problema.
Tentativa 3
Também tentei escapar dos colchetes.
cat testfile.txt | sed -e 's/\/some\/input\/directory\/\(\[A-z0-9\/\.\-\]\*\)\.txt/$1/g'
Resultado:
# This file contains a short description of the columns in the
# meta-analysis summary file, named '/some/output/directory/result.txt'
# (Skipping some comment lines...)
# Input for this meta-analysis was stored in the files:
# --> Input File 1 : /some/input/directory/cohort1/dataset1_chrAll.regenie.txt
# --> Input File 2 : /some/input/directory/cohort2/subdir1/chrAll-out.txt
# --> Input File 3 : /some/input/directory/cohort2/subdir2/chrAll-out_ver2.txt
# --> Input File 4 : /some/input/directory/cohort3/resfile.txt
# --> Input File 5 : /some/input/directory/cohort4/regenie_res_chrAll.txt
Isso não gerou um erro, mas não era isso que eu queria.
Tentativa 4
Por fim, tentei adicionar a opção -r sem escapar parênteses ou colchetes.
cat testfile.txt | sed -re 's/\/some\/input\/directory\/([A-z0-9\/\.\-]*)\.txt/$1/g'
Resultado:
sed: -e expression #1, char 55: Invalid range end
Apareceu a mesma mensagem de erro na primeira tentativa.
Gostaria de perguntar quais são os problemas nas minhas linhas de comando e se há alguma solução possível para isso.
Obrigado.