GNU/Linux >> Tutoriales Linux >  >> Linux

Un script gawk para convertir comillas tipográficas

Administro un sitio web personal y edito las páginas web a mano. Como no tengo muchas páginas en mi sitio, esto funciona bien para mí, permitiéndome "rascarme la picazón" de ingresar al código del sitio.

La terminal de Linux

  • Los 7 mejores emuladores de terminal para Linux
  • 10 herramientas de línea de comandos para el análisis de datos en Linux
  • Descargar ahora:hoja de referencia de SSH
  • Hoja de trucos de comandos avanzados de Linux
  • Tutoriales de línea de comandos de Linux

Cuando actualicé el diseño de mi sitio web recientemente, decidí convertir todas las comillas simples en "comillas tipográficas" o comillas que se parecen a las que se usan en el material impreso:"" en lugar de "".

Editar todas las citas a mano llevaría demasiado tiempo, así que decidí automatizar el proceso de convertir las citas en todos mis archivos HTML. Pero hacerlo a través de un script o programa requiere algo de inteligencia. El script necesita saber cuándo convertir una comilla simple en una comilla tipográfica y qué comillas usar.

Puede utilizar diferentes métodos para convertir cotizaciones. Greg Pittman escribió un script de Python para corregir comillas tipográficas en el texto. Escribí el mío en GNU awk (gawk).

Obtenga nuestra hoja de trucos de awk. Descarga gratuita.

Para empezar, escribí una función gawk simple para evaluar un solo carácter. Si ese carácter es una comilla, la función determina si debe generar una comilla simple o una comilla tipográfica. La función busca el carácter anterior; si el carácter anterior es un espacio, la función genera una comilla tipográfica izquierda. De lo contrario, la función genera una comilla tipográfica correcta. El script hace lo mismo con las comillas simples.

function smartquote (char, prevchar) {
        # print smart quotes depending on the previous character
        # otherwise just print the character as-is

        if (prevchar ~ /\s/) {
                # prev char is a space
                if (char == "'") {
                        printf("‘");
                }
                else if (char == "\"") {
                        printf("“");
                }
                else {
                        printf("%c", char);
                }
        }
        else {
                # prev char is not a space
                if (char == "'") {
                        printf("’");
                }
                else if (char == "\"") {
                        printf("”");
                }
                else {
                        printf("%c", char);
                }
        }
}

Con esa función, el cuerpo del script gawk procesa el archivo de entrada HTML carácter por carácter. El script imprime todo el texto palabra por palabra cuando está dentro de una etiqueta HTML (por ejemplo, <html lang="en"> . Fuera de cualquier etiqueta HTML, el script usa smartquote() Función para imprimir texto. La smartquote() hace el trabajo de evaluar cuándo imprimir comillas simples o comillas tipográficas.

function smartquote (char, prevchar) {
        ...
}

BEGIN {htmltag = 0}

{
        # for each line, scan one letter at a time:

        linelen = length($0);

        prev = "\n";

        for (i = 1; i <= linelen; i++) {
                char = substr($0, i, 1);

                if (char == "<") {
                        htmltag = 1;
                }

                if (htmltag == 1) {
                        printf("%c", char);
                }
                else {
                        smartquote(char, prev);
                        prev = char;
                }

                if (char == ">") {
                        htmltag = 0;
                }
        }

        # add trailing newline at end of each line
        printf ("\n");
}

He aquí un ejemplo:

gawk -f quotes.awk test.html > test2.html

Entrada de muestra:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Test page</title>
  <link rel="stylesheet" type="text/css" href="https://opensource.com/test.css" />
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width" />
</head>
<body>
  <h1><a href="https://opensource.com/"><img src="https://opensource.com/logo.png" alt="Website logo" /></a></h1>
  <p>"Hi there!"</p>
  <p>It's and its.</p>
</body>
</html>

Salida de muestra:

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Test page</title>
  <link rel="stylesheet" type="text/css" href="https://opensource.com/test.css" />
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width" />
</head>
<body>
  <h1><a href="https://opensource.com/"><img src="https://opensource.com/logo.png" alt="Website logo" /></a></h1>
  <p>&ldquo;Hi there!&rdquo;</p>
  <p>It&rsquo;s and its.</p>
</body>
</html>


Linux
  1. ¿Cómo depurar un script Bash?

  2. ¿Comodines dentro de las comillas?

  3. ¿Comprobar que se está ejecutando un script?

  4. ¿Cómo agregar nuevas líneas en variables en Bash Script?

  5. ¿Guión Vs de una sola línea?

Reemplace las comillas tipográficas con el comando sed de Linux

35 ejemplos de secuencias de comandos Bash

Cómo ejecutar un script Bash

Servicio del sistema operativo Linux 'scsi_reserve'

Cómo convertir DATE a UNIX TIMESTAMP en script de shell en MacOS

Convierta datos binarios a hexadecimales en un script de shell