Tengo que crear regularmente más de 100 archivos de texto a partir de plantillas.
Actualmente uso un script de shell demasiado complicado. Creo que hay una forma más inteligente de manejar esto, pero no sé cómo.
Tengo una "base de datos":
# outputfile template data1 data2 data3
first.txt $template_main $text1 abcd 1234
second.txt $template_main $text2 efgh 5678
third.txt $template_other $text1 ij 90
Y un archivo de configuración:
template_main=main.txt
template_other=other.txt
text1=whatever
text2=blah
Las plantillas son archivos de texto con marcadores de posición como %% data2 %% (el formulario de marcador de posición se puede cambiar).
¿Alguien conoce una herramienta para automatizar esto mejor que con un script de shell complicado?
shell-script
text-processing
Gregory MOUSSAT
fuente
fuente
Respuestas:
Probablemente hay miles de dichos lenguajes de plantilla y software asociado. Un ejemplo popular es ERB , que es parte de Vanilla Ruby. Después de instalar Ruby, puede iniciar
irb
o un editor y simplemente pegar el ejemplo canónico para tener una idea:fuente
También podrías considerar:
la herramienta GNU llamada,
m4
que es un procesador de texto que genera el texto que desea tomar como entradas una plantilla con las partes para cambiar. Seguramente sería más simple que el script de shell. (funciona más o como un preprocesador C con #define macro IIRC).la herramienta GNU
xsltproc
que aplica una transformación y te da el resultado. La plantilla está enxml
, yxslt
es el formato de las cosas de transformación que debes hacerxml
para generar texto.Personalmente tengo preferencia por
xslt
, pero en su caso, aunque no encajaría con los campos en el formulario%DATA1%
%DATA2%
. Necesita xml, por lo que odiaría cambiar sus plantillas.Por lo tanto, realmente debería echar un vistazo
m4
.Haskell
lenguaje de programación es realmente bueno para transformar las transmisiones. Solo estoy considerando esta idea porque los amantes de Haskell hablan sobre elParsec
paquete maravilloso , que permite el análisis natural de secuencias de cadenas. Mucho mejor que xslt, que ya es bueno. Solo los repito, porque estoy aprendiendo Haskell y no tengo la sola idea de cómo transformar el texto con él por ahora .fuente
Creo que sería mejor mirar un lenguaje de scripting real, como PHP, Perl o Python, para hacer algo como esto por usted, especialmente si realmente no quiere entrar en scripts de shell complejos a gran escala.
fuente
No sé por qué haces eso, pero tienes dos plantillas aquí. Una es su 'base de datos' y la otra es su plantilla real. Ambos son fáciles de manejar con shtpl . (proyecto privado mío, por lo que no se usa mucho, pero se desarrolló para resolver realmente ese tipo de problemas)
Con shtpl harías algo como esto:
Contenido del archivo 'configuración':
Contenido del archivo 'base de datos' (supuse que el delimitador es tab (\ t)):
Contenido de generatetemplates.sh:
Contenido de main.txt (other.txt es muy parecido):
Entonces ejecutando generatetemplates.sh
nos genera first.txt, second.txt y third.txt.
Pequeña explicación: en generatetemplates.sh se encuentra primero la 'base de datos' necesaria generada a partir de su archivo de configuración. Y en segundo lugar, para cada tupel en la base de datos, finalmente, el correspondiente Out-file de su In-template.
Nota: Un problema de datos vacíos [123] es leído. Por lo tanto, no es posible con este enfoque.
Entonces, espero que esto sea lo suficientemente simple para sus necesidades.
¡Que te diviertas!
fuente
Recientemente publiqué un proyecto de código abierto que logra eso usando una sintaxis de plantilla similar a un jinja. Se llama cookie . Aquí hay una demostración:
fuente
Salida tcat.sh . Digamos que tiene un archivo de plantilla:
entonces
Salida:
fuente