GNU/Linux >> Belajar Linux >  >> Linux

Skrip gawk untuk mengonversi kutipan pintar

Saya mengelola situs web pribadi dan mengedit halaman web dengan tangan. Karena saya tidak memiliki banyak halaman di situs saya, ini bekerja dengan baik untuk saya, membiarkan saya "menggaruk gatal" untuk masuk ke kode situs.

Terminal Linux

  • 7 emulator terminal teratas untuk Linux
  • 10 alat baris perintah untuk analisis data di Linux
  • Unduh Sekarang:lembar contekan SSH
  • Lembar contekan perintah Linux tingkat lanjut
  • Tutorial baris perintah Linux

Ketika saya memperbarui desain situs web saya baru-baru ini, saya memutuskan untuk mengubah semua tanda kutip biasa menjadi "tanda kutip pintar", atau tanda kutip yang terlihat seperti yang digunakan dalam materi cetak:"" bukan "".

Mengedit semua tanda kutip dengan tangan akan memakan waktu terlalu lama, jadi saya memutuskan untuk mengotomatiskan proses konversi tanda kutip di semua file HTML saya. Tetapi melakukannya melalui skrip atau program membutuhkan kecerdasan. Skrip perlu mengetahui kapan harus mengonversi kutipan biasa menjadi kutipan cerdas, dan kutipan mana yang akan digunakan.

Anda dapat menggunakan berbagai metode untuk mengonversi kutipan. Greg Pittman menulis skrip Python untuk memperbaiki kutipan cerdas dalam teks. Saya menulis milik saya di GNU awk (gawk).

Dapatkan lembar contekan awk kami. Unduhan gratis.

Untuk memulai, saya menulis fungsi melongo sederhana untuk mengevaluasi satu karakter. Jika karakter tersebut adalah kutipan, fungsi menentukan apakah karakter tersebut harus menampilkan kutipan biasa atau kutipan cerdas. Fungsi melihat karakter sebelumnya; jika karakter sebelumnya adalah spasi, fungsi mengeluarkan kutipan pintar kiri. Jika tidak, fungsi mengeluarkan kutipan cerdas yang tepat. Script melakukan hal yang sama untuk tanda kutip tunggal.

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

Dengan fungsi itu, badan skrip gawk memproses file input HTML karakter demi karakter. Script mencetak semua teks kata demi kata saat berada di dalam tag HTML (misalnya, <html lang="en"> . Di luar tag HTML apa pun, skrip menggunakan smartquote() berfungsi untuk mencetak teks. smartquote() function melakukan pekerjaan mengevaluasi kapan harus mencetak kutipan biasa atau kutipan cerdas.

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

Ini contohnya:

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

Contoh masukan:

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

Contoh keluaran:

<!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. Bagaimana Cara Men-debug Skrip Bash?

  2. Wildcard Di Dalam Kutipan?

  3. Memeriksa Skrip Apakah Berjalan?

  1. Bagaimana Cara Menambahkan Baris Baru Ke Variabel Dalam Skrip Bash?

  2. Skrip Vs Satu Baris?

  3. Konversi Kata Sandi Dengan Karakter Khusus Untuk Digunakan Dengan Script Harapkan?

  1. Bash Konversi \xc3\x89 Ke ?

  2. AWK Vs NAWK Vs GAWK

  3. Layanan OS Linux 'scsi_reserve'