Use regexes para reformatar um título de referência em um arquivo BibTeX

0

Eu tenho muitas referências em um arquivo BibTeX da seguinte forma:

@inproceedings{lechartier2014static,
  title={Static and Dynamic Modeling of a PEMFC for Prognostics Purpose},
  author={Lechartier, Elodie and Gouriveau, Rafael and Pera, Marie-Cecile and Hissel, Daniel and Zerhouni, Noureddine},
  booktitle={Vehicle Power and Propulsion Conference (VPPC), 2014 IEEE},
  pages={1--5},
  year={2014},
  organization={IEEE}
}
@inproceedings{zein2013statistical,
  title={Statistical approach to online prognostics of turbine engine components},
  author={Zein-Sabatto, Saleh and Bodruzzaman, Jabir and Mikhail, Mervat},
  booktitle={Southeastcon, 2013 Proceedings of IEEE},
  pages={1--6},
  year={2013},
  organization={IEEE}
}

Link para o arquivo original (o número de espaços na frente de cada entrada title= varia).

Como posso usar regexes para alterar toda a parte do título:

  title={\textbf{Static and Dynamic Modeling of a PEMFC for Prognostics Purpose}},
    
por OOzy Pal 11.10.2015 / 12:08

2 respostas

1

Usando sed :

sed 's/^\( *\)title=\(.*\),/title={\textbf},/' in

Para editar o arquivo no local em vez de imprimir o arquivo editado em stdout , adicione a opção -i :

sed -i 's/^\( *\)title=\(.*\),/title={\textbf},/' in
  • \( *\) : corresponde e agrupa qualquer número de caracteres no início da linha;
  • title= : corresponde a uma string ^title= ;
  • \(.*\), : corresponde e agrupa qualquer número de qualquer caractere antes de um caractere , avidamente e um caractere , ;
  • title={\textbf}, : substitui a correspondência por uma string title={\textbf seguida pelo grupo capturado seguido por uma string }, ;
% cat in
@inproceedings{lechartier2014static,
  title={Static and Dynamic Modeling of a PEMFC for Prognostics Purpose},
  author={Lechartier, Elodie and Gouriveau, Rafael and Pera, Marie-Cecile and Hissel, Daniel and Zerhouni, Noureddine},
  booktitle={Vehicle Power and Propulsion Conference (VPPC), 2014 IEEE},
  pages={1--5},
  year={2014},
  organization={IEEE}
}
@inproceedings{zein2013statistical,
  title={Statistical approach to online prognostics of turbine engine components},
  author={Zein-Sabatto, Saleh and Bodruzzaman, Jabir and Mikhail, Mervat},
  booktitle={Southeastcon, 2013 Proceedings of IEEE},
  pages={1--6},
  year={2013},
  organization={IEEE}
}
% sed 's/^\( *\)title=\(.*\),/title={\textbf},/' in
@inproceedings{lechartier2014static,
  title={\textbf{Static and Dynamic Modeling of a PEMFC for Prognostics Purpose}},
  author={Lechartier, Elodie and Gouriveau, Rafael and Pera, Marie-Cecile and Hissel, Daniel and Zerhouni, Noureddine},
  booktitle={Vehicle Power and Propulsion Conference (VPPC), 2014 IEEE},
  pages={1--5},
  year={2014},
  organization={IEEE}
}
@inproceedings{zein2013statistical,
  title={\textbf{Statistical approach to online prognostics of turbine engine components}},
  author={Zein-Sabatto, Saleh and Bodruzzaman, Jabir and Mikhail, Mervat},
  booktitle={Southeastcon, 2013 Proceedings of IEEE},
  pages={1--6},
  year={2013},
  organization={IEEE}
}
    
por kos 11.10.2015 / 12:44
3

Isso funciona bem:

perl -i.bak -pe 's|^(\s*title=)(.+?)(,)$|$1\{\textbf$2\}$3|' ProgRef.bib

Isso reformata todas as partes do título e assume que há apenas um título por linha. Também faz um backup do seu arquivo (com a extensão .bak ).

Atualização: Se o seu arquivo de entrada tiver finais de linha do DOS / Windows, faça o seguinte:

  1. sudo apt-get install dos2unix
  2. dos2unix ProgRef.bib
  3. execute o regex acima
por A.P. 11.10.2015 / 12:14