GNU/Linux >> Znalost Linux >  >> Linux

Gawk skript pro převod chytrých uvozovek

Spravuji osobní webové stránky a upravuji webové stránky ručně. Vzhledem k tomu, že na svém webu nemám mnoho stránek, funguje to pro mě dobře, protože mi to umožňuje "poškrábat se" při vstupu do kódu webu.

Linuxový terminál

  • 7 nejlepších emulátorů terminálu pro Linux
  • 10 nástrojů příkazového řádku pro analýzu dat v systému Linux
  • Stáhnout nyní:SSH cheat sheet
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Výukové programy příkazového řádku systému Linux

Když jsem nedávno aktualizoval design svých webových stránek, rozhodl jsem se přeměnit všechny prosté uvozovky na „chytré uvozovky“ nebo uvozovky, které vypadají jako ty použité v tištěných materiálech:„“ místo „“.

Ruční úprava všech uvozovek by zabrala příliš dlouho, proto jsem se rozhodl zautomatizovat proces převodu uvozovek ve všech mých HTML souborech. Ale dělat to pomocí skriptu nebo programu vyžaduje určitou inteligenci. Skript potřebuje vědět, kdy převést prostou nabídku na inteligentní nabídku a kterou nabídku použít.

K převodu nabídek můžete použít různé metody. Greg Pittman napsal skript Python pro opravu chytrých uvozovek v textu. Napsal jsem svůj v GNU awk (gawk).

Získejte náš awk cheat sheet. Zdarma ke stažení.

Pro začátek jsem napsal jednoduchou funkci gawk pro vyhodnocení jednoho znaku. Pokud je tento znak uvozovkou, funkce určí, zda má vydat obyčejnou uvozovku nebo inteligentní uvozovku. Funkce se podívá na předchozí znak; pokud je předchozí znak mezera, funkce vypíše levou inteligentní uvozovku. V opačném případě funkce vydá správnou inteligentní nabídku. Skript dělá totéž pro jednoduché uvozovky.

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);
                }
        }
}

Pomocí této funkce tělo skriptu gawk zpracovává vstupní soubor HTML znak po znaku. Skript vytiskne veškerý text doslovně, když je uvnitř značky HTML (například <html lang="en"> . Mimo jakékoli HTML značky používá skript smartquote() funkce pro tisk textu. smartquote() Funkce vyhodnocuje, kdy se mají vytisknout jednoduché uvozovky nebo chytré uvozovky.

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");
}

Zde je příklad:

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

Ukázkový vstup:

<!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>

Ukázkový výstup:

<!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. Průvodce pro začátečníky koukáním

  2. Zástupné znaky uvnitř uvozovek?

  3. Kontrola, zda skript běží?

  1. Jak přidat nové řádky do proměnných ve skriptu Bash?

  2. Služba OS Linux „scsi_reserve“

  3. Jak převést DATE na UNIX TIMESTAMP ve skriptu shellu na MacOS

  1. Nahraďte chytré uvozovky příkazem sed pro Linux

  2. Jak převést .. v názvech cest na absolutní název v bash skriptu?

  3. Jak nechat uživatele provést příkaz obsahující uvozovky v sudoers?