<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Regex on Natenoms Blog</title><link>https://natenom.de/tags/regex/</link><description>Recent content in Regex on Natenoms Blog</description><generator>Hugo -- gohugo.io</generator><language>de</language><copyright/><lastBuildDate>Tue, 09 Jan 2024 21:51:16 +0100</lastBuildDate><atom:link href="https://natenom.de/tags/regex/index.xml" rel="self" type="application/rss+xml"/><item><title>Mein Hugo Helper Python Script und was es tun kann</title><link>https://natenom.de/2024/01/mein-hugo-helper-python-script-und-was-es-tun-kann/</link><pubDate>Tue, 09 Jan 2024 21:51:16 +0100</pubDate><guid>https://natenom.de/2024/01/mein-hugo-helper-python-script-und-was-es-tun-kann/</guid><description>&lt;p>Alle meine Webseiten werden mit Hilfe von Hugo statisch generiert. Für die Arbeit mit Hugo nutze ich schon länger ein eigenes Python-Script, das mir einige Arbeit abnimmt.&lt;/p>
&lt;p>Vor ein paar Tagen hat mich jemand gefragt, ob ich das Script nicht öffentlich machen könnte und ich habe das zum Anlass genommen, da mal einige Dinge zu verschönern, damit auch andere Menschen damit etwas anfangen können.&lt;/p></description><content:encoded><![CDATA[<p>Alle meine Webseiten werden mit Hilfe von Hugo statisch generiert. Für die Arbeit mit Hugo nutze ich schon länger ein eigenes Python-Script, das mir einige Arbeit abnimmt.</p>
<p>Vor ein paar Tagen hat mich jemand gefragt, ob ich das Script nicht öffentlich machen könnte und ich habe das zum Anlass genommen, da mal einige Dinge zu verschönern, damit auch andere Menschen damit etwas anfangen können.</p>
<div class="shortcode-notice warnung">
    <div class="shortcode-notice-title warnung">
        Warnung</div>
    <div class="notice-content"><p>Ich bin kein Programmierer und das Script hat vermutlich eine eher schlechte Qualität. Aber das stört mich nicht, denn es funktioniert (für mich).</p>
<p>Wenn es andere Menschen für sich nutzen können, dann ist das großartig. Wenn nicht, dann ist es auch okay.</p>
</div>
</div>


<p>Zur Installation des Scripts bitte in die <code>README.md</code> des Projekts schauen.</p>

<h2 id="konfiguration" data-numberify>Konfiguration<a class="anchor ms-1" href="#konfiguration"></a></h2>
<p>In der Konfigurationsdatei <code>~/.config/hgh/hgh.json</code> gibt es einen Abschnitt für allgemeine Einstellungen und dann je einen Abschnitt pro Website, die mit hgh verwaltet werden soll.</p>
<p>Hier ist hinterlegt, welcher Editor verwendet werden soll, wo die Basisverzeichnisse der Websites liegen, wo die <code>content</code>-Verzeichnisse, welcher Benutzernamen für rsync verwendet werden soll, usw.</p>

<h2 id="ein-alias-macht-das-leben-einfacher" data-numberify>Ein Alias macht das Leben einfacher<a class="anchor ms-1" href="#ein-alias-macht-das-leben-einfacher"></a></h2>
<p>Damit ich nicht dauernd <code>hgh.py --site blog</code> tippen muss, habe ich für jede meiner Websites in der <code>.bashrc</code> einen Alias erstellt:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>alias hgb<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>hgh.py --site blog<span style="color:#e6db74">`</span>
</span></span><span style="display:flex;"><span>alias hgw<span style="color:#f92672">=</span><span style="color:#e6db74">`</span>hgh.py --site wiki<span style="color:#e6db74">`</span>
</span></span></code></pre></div><p>Somit kann ich z. B. mittels <code>hgb -cdb</code> ins Basisverzeichnis des Blogs wechseln.</p>

<h2 id="was-der-hugo-helper-hgh-für-mich-macht" data-numberify>Was der Hugo Helper (hgh) für mich macht<a class="anchor ms-1" href="#was-der-hugo-helper-hgh-für-mich-macht"></a></h2>

<h3 id="allgemeine-infos" data-numberify>Allgemeine Infos<a class="anchor ms-1" href="#allgemeine-infos"></a></h3>
<p>Mit <code>--help</code> gibt es eine hoffentlich hilfreiche Hilfe. 😁</p>
<p>Mit <code>hgh.py --sites</code> bekomme ich eine Liste aller Websites und der zugehörigen Basisverzeichnisse. Mit <code>--printconfig</code> wird die ganze Konfiguration ausgegeben.</p>

<h3 id="verzeichniswechsel" data-numberify>Verzeichniswechsel<a class="anchor ms-1" href="#verzeichniswechsel"></a></h3>
<p>Mit <code>-cdb</code> kann ich ins Basisverzeichnis einer Website wechseln, mit <code>-cdc</code> ins normale Content-Verzeichnis und mit <code>-cdl</code> in ein alternatives Content-Verzeichnis.</p>
<p>Letzeres nutze ich für verschiedene Blogbeiträge im Entwurfsmodus. Denn mein Blog besteht aus mehreren tausend Blogbeiträgen und das Bauen dauert sehr lange. Zum Schreiben von längeren Blogbeiträgen nutze ich dieses Verzeichnis und das Bauen dauert dann nur wenige Sekunden.</p>

<h3 id="kommentar-datei" data-numberify>Kommentar-Datei<a class="anchor ms-1" href="#kommentar-datei"></a></h3>
<p>Für Kommentare im Blog nutze mittlerweile eine eigene Implementation, bei der die Kommentare im Page Bundle innerhalb der Datei <code>comments.json</code> stehen.</p>
<p>Mit <code>hgh.py --site blog --create-comments-file</code> wird im aktuellen Verzeichnis eine <code>comments.json</code>-Datei erstellt, die bereits ein Skelett für einen Kommentar enthält. Dazu wird die Info ausgegeben, dass man noch im Front Matter <code>jsoncomments: true</code> eintragen muss. Da es hier im Blog nur sehr selten Kommentare gibt, vergesse ich das sonst und will auch nicht jedes Mal nachschauen, wie die Syntax eines Kommentars ist.</p>

<h3 id="neuer-blogbeitrag" data-numberify>Neuer Blogbeitrag<a class="anchor ms-1" href="#neuer-blogbeitrag"></a></h3>
<p>Diese Funktion nutze ich nur für meinen Blog und kann mit einem kurzen <code>hgb --create &quot;Ein neuer Blogbeitrag bla blub&quot;</code> gleich mehrere Aufgaben automatisieren:</p>
<ul>
<li>benötigte Verzeichnisse erstellen</li>
<li>Slug aus dem angegebenen Titel erzeugen</li>
<li>Page Bundle erstellen</li>
<li>Markdown-Datei für den Blogbeitrag erstellen und mit einem Template befüllen</li>
</ul>
<p>Details dazu, was alles gemacht wird, gibt es <a  href="/2024/01/neues-helferlein-fuer-hugo-erleichtert-das-bloggen/">in diesem Blogbeitrag</a>.</p>
<p>In der aktuellen Version des Scripts kann ich auch noch mit <code>--template</code> angeben, welches Template verwendet werden soll.</p>
<p>Mit <code>hgh.py --list-templates</code> wird eine Liste aller vorhandenen Templates angezeigt.</p>
<p>Wer das benutzen will, muss den Code dafür im Script anpassen, um alle notwendigen Variablen auch zu befüllen.</p>

<h3 id="tmux" data-numberify>Tmux<a class="anchor ms-1" href="#tmux"></a></h3>
<p>Bevor ich VSCode für die Bearbeitung meiner Websites nutzte, habe ich dafür den micro-Editor auf der Kommandozeile benutzt. Aus dieser Zeit stammt <code>--tmux</code>, das ein bestimmtes Layout in Tmux startet. Das habe ich aber schon länger nicht mehr verwendet und man müsste es für sich anpassen.</p>

<h3 id="lokale-vorschau-einer-website" data-numberify>Lokale Vorschau einer Website<a class="anchor ms-1" href="#lokale-vorschau-einer-website"></a></h3>
<p>Mittels <code>--hugo-server</code> wird der Blog lokal gebaut und auf dem einstellbaren Port zugänglich gemacht. Für das alternative Content-Verzeichnis gibt es <code>--hugo-server-light</code>.</p>
<p>Dazu kann man noch <code>--hugo-server-env</code> angeben, mit dem sich einstellen lässt, welche Umgebung Hugo verwendet. Default hier ist <code>development</code>. Ich nutze diese Funktion, um den umfangreichen Blog testweise so zu bauen, dass nur die Blogbeiträge der letzten Monate enthalten sind, was dann statt 35 Sekunden (für den gesamten Blog) nur ca. 3 Sekunden dauert.</p>

<h3 id="tags-kategorien-und-deren-häufigkeit" data-numberify>Tags, Kategorien und deren Häufigkeit<a class="anchor ms-1" href="#tags-kategorien-und-deren-häufigkeit"></a></h3>
<p>Was mir am Anfang bei Hugo im Vergleich zu WordPress sehr gefehlt hat, waren die Vorschläge für zu verwendende Tags und Kategorien in einem neuen Blogbeitrag.</p>
<p>Hierfür muss man mit dem Hugo Helper eine kleine &ldquo;Datenbank&rdquo; erstellen lassen. Dazu wird mit Hilfe von <code>find</code> und dem Tool <code>yq</code> je eine Liste aller bisher verwendeten Tags und Kategorien erstellt und dazu auch die Häufigkeit der Verwendung angegeben.</p>
<p>Diese &ldquo;Datenbank&rdquo; erstellt man mit <code>hgh.py --site blog --create-tags-categories-caches</code> und das dauert ein paar Sekunden. Im Ergebnis werden innerhalb von <code>~/.cache/hgh/</code> für jede Website zwei Dateien erzeugt:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>&gt; ls -1 .cache/hgh/
</span></span><span style="display:flex;"><span>natenom.de_categories.list
</span></span><span style="display:flex;"><span>natenom.de_tags.list
</span></span></code></pre></div><p>Ein Auszug aus den Tags:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>[…]
</span></span><span style="display:flex;"><span>8:F-Droid
</span></span><span style="display:flex;"><span>1:FLAC
</span></span><span style="display:flex;"><span>4:Facebook
</span></span><span style="display:flex;"><span>1:Fahrbahn
</span></span><span style="display:flex;"><span>556:Fahrrad
</span></span><span style="display:flex;"><span>52:Fahrradanhänger
</span></span><span style="display:flex;"><span>1:Fahrradbubble
</span></span><span style="display:flex;"><span>22:Fahrradcomputer
</span></span><span style="display:flex;"><span>6:Fahrradmordor
</span></span><span style="display:flex;"><span>6:Fahrradparkplätze
</span></span><span style="display:flex;"><span>2:Fahrradstaffel
</span></span><span style="display:flex;"><span>1:Fahrräder
</span></span><span style="display:flex;"><span>10:Falschparker
</span></span><span style="display:flex;"><span>[…]
</span></span></code></pre></div><p>Um nicht manuell in den &ldquo;Datenbanken&rdquo; herumstöbern zu müssen, gibt es <code>--find-tags xyz</code> und <code>--find-categories xyz</code> bzw. die Kurzformen <code>-ft xyz</code> und <code>-fc xyz</code>. Man kann reguläre Ausdrücke verwenden.</p>
<p>Führt man diese aus, wird das Tool <code>fzf</code> (Fuzzy Find) benutzt, um die Liste anzuzeigen und darin suchen zu können:</p>

<figure class="shortcode-video">
    <video preload="metadata" controls>
    <source src="2024-01-06-hugo-searchtag.mp4" type="video/mp4" poster="">
    Your browser does not seem to support video.
    </video>

<figcaption>Mittels fzf kann man in der Liste der Tags suchen. Die Anzahl der Verwendung wird auch angezeigt. (<a href="2024-01-06-hugo-searchtag.mp4">Link zum Video</a>)</figcaption>
</figure>

<div class="shortcode-notice hinweis">
    <div class="shortcode-notice-title hinweis">
        Hinweis</div>
    <div class="notice-content">Ab und zu muss man die Datenbanken neu erstellen lassen, da sonst Tags und Kategorien neuer Blogbeiträge nicht enthalten sind.</div>
</div>


<div class="shortcode-notice hinweis">
    <div class="shortcode-notice-title hinweis">
        Hinweis</div>
    <div class="notice-content">Ich weiß, dass es für VSCode z. B. das Plugin FrontMatter gibt, das genau diese Funktionialität liefert. Ich möchte jedoch kein riesiges Plugin mit tausenden anderen Funktionen nutzen, wenn es auch einfacher geht. Und wer weiß, ob ich in x Zeit immer noch mit VSCode arbeiten werde.</div>
</div>



<h3 id="alles-andere-finden" data-numberify>Alles andere finden<a class="anchor ms-1" href="#alles-andere-finden"></a></h3>
<p>Mittlerweile nutze ich zum Auffinden von Blogbeitragen die Tastenkombination <code>Strg + Shift + f</code> in VSCode. Aber früher brauchte ich dafür etwas Eigenes.</p>
<p>Hierfür gibt es zwei Varianten.</p>

<h4 id="einfache-variante" data-numberify>Einfache Variante<a class="anchor ms-1" href="#einfache-variante"></a></h4>
<p>Mittels <code>--find xyz</code> bzw. der Kurzform <code>-f xyz</code> wird einfach nur rekursiv nach xyz im Content-Verzeichnis der angegebenen Website gegrept und es gibt eine farbige Ausgabe mit Dateinamen und der zum Suchbegriff passenden Zeile. Groß- und Kleinschreibung werden dabei nicht ignoriert.</p>
<p>Hier z. B. das Ergebnis für die Suche nach <code>^hugo</code>. Das ist ein Regulärer Ausdruck, der nur auf Zeilen passt, in denen <code>hugo</code> am Anfang der Zeile steht:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>posts/2022/2022-02-18-mein-workflow-mit-hugo/index.md:130:1:hugo server -E -D -F -v -c /home/hugo-light/content/
</span></span><span style="display:flex;"><span>posts/2022/2022-02-27-hugo-theme-optimiert-zeit-zum-rendern-massiv-verringert.md:24:1:hugo --templateMetrics --templateMetricsHints --gc --minify &gt; hugo-metric_0.txt
</span></span><span style="display:flex;"><span>posts/2022/2022-02-06-ich-mache-wieder-einen-linkdump-woechentlich/index.md:64:1:hugo new -k linkdump posts/2022-02-linkdump-kw-6-2022
</span></span><span style="display:flex;"><span>posts/2022/2022-03-19-umzug-dokuwiki-hugo-3-einrichtung/index.md:29:1:hugo new site wiki.natenom.com
</span></span><span style="display:flex;"><span>posts/2022/2022-02-03-umzug-von-wordpress-zu-hugo-1/index.md:310:1:hugo server --renderToDisk -D -E -F -v
</span></span><span style="display:flex;"><span>posts/2022/2022-02-13-weiterleitungen-auf-umlaut-urls/index.md:55:1:hugo-search-tags -E &#34;(ä|ö|ü|ß)&#34; | cut -d&#39;:&#39; -f2 &gt; /tmp/umlaut-urls-hugo.txt
</span></span></code></pre></div><p>So kann ich z. B. sehr einfach alle Blogbeiträge anzeigen lassen, die ein bestimmtes Tag oder eine Kategorie verwenden, hier z. B. &ldquo;Linux&rdquo;, in dem ich den Regulären Ausdruck <code>hgb -f &quot;^\W+- Linux&quot;</code> nutze, der auf Zeilen passt, die am Zeilenanfang beliebig viele Leerzeichen enthalten, gefolgt von <code>- Linux</code>:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>[…]
</span></span><span style="display:flex;"><span>posts/2013/2013-06-27-alle-videos-eines-youtube-kanals-auf-einmal-herunterladen-mit-youtube-dl.md:7:1:  - Linux
</span></span><span style="display:flex;"><span>posts/2018/2018-11-12-mit-fensterregeln-in-plasma5-kde-bestimmte-fenster-beim-task-switcher-und-anderen-effekten-ignorieren.md:13:1:  - Linux
</span></span><span style="display:flex;"><span>posts/2013/2013-08-15-neuer-versuch-mit-kde-sc.md:11:1:  - Linux
</span></span><span style="display:flex;"><span>[…]
</span></span></code></pre></div>
<h4 id="erweiterte-variante" data-numberify>Erweiterte Variante<a class="anchor ms-1" href="#erweiterte-variante"></a></h4>
<p>Mittels <code>--find-fuzzy xyz</code> bzw. der Kurzform <code>-ff xyz</code> wird die Ausgabe der oben gezeigten einfachen Variante zusätzlich an <code>fzf</code> übergeben, sodass man darin suchen kann, eine Vorschau der Datei angezeigt bekommt und durch Drücken von <code>F4</code> die Datei direkt im Editor öffnen kann, den man in der Konfiguration in <code>bin_editor</code> eingestellt hat.</p>
<p>Auch hier kann man reguläre Ausdürcke verwenden, z. B. <code>-ff &quot;Markdown.*kate&quot;</code></p>
 <figure class="image-caption"><a href="2024-01-09-beispiel-hgh-ff-cover.webp"><picture>
                <source type="image/webp" srcset="/2024/01/mein-hugo-helper-python-script-und-was-es-tun-kann/2024-01-09-beispiel-hgh-ff-cover_hub930d5896ab04f44420e5ef9ccf62eb9_74206_360x0_resize_q95_h2_catmullrom_2.webp 360w,/2024/01/mein-hugo-helper-python-script-und-was-es-tun-kann/2024-01-09-beispiel-hgh-ff-cover_hub930d5896ab04f44420e5ef9ccf62eb9_74206_500x0_resize_q95_h2_catmullrom_2.webp 500w,/2024/01/mein-hugo-helper-python-script-und-was-es-tun-kann/2024-01-09-beispiel-hgh-ff-cover_hub930d5896ab04f44420e5ef9ccf62eb9_74206_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                                          sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px" />
                <img alt="" srcset="/2024/01/mein-hugo-helper-python-script-und-was-es-tun-kann/2024-01-09-beispiel-hgh-ff-cover_hub930d5896ab04f44420e5ef9ccf62eb9_74206_360x0_resize_q95_h2_catmullrom_2.webp 360w, /2024/01/mein-hugo-helper-python-script-und-was-es-tun-kann/2024-01-09-beispiel-hgh-ff-cover_hub930d5896ab04f44420e5ef9ccf62eb9_74206_500x0_resize_q95_h2_catmullrom_2.webp 500w, /2024/01/mein-hugo-helper-python-script-und-was-es-tun-kann/2024-01-09-beispiel-hgh-ff-cover_hub930d5896ab04f44420e5ef9ccf62eb9_74206_816x0_resize_q95_h2_catmullrom_2.webp 816w"
                     sizes="(max-width: 424px) 360px, (max-width: 596px) 500px, (min-width: 565px) 816px"
                     src="/2024/01/mein-hugo-helper-python-script-und-was-es-tun-kann/2024-01-09-beispiel-hgh-ff-cover_hub930d5896ab04f44420e5ef9ccf62eb9_74206_816x0_resize_q95_h2_catmullrom_2.webp" title="" loading="lazy" width="816" height="623" /></picture></a></figure>

<h3 id="website-bauen-und-hochladen" data-numberify>Website bauen und hochladen<a class="anchor ms-1" href="#website-bauen-und-hochladen"></a></h3>
<p>Mit <code>hgh.py --site blog --build</code> wird mein Blog lokal gebaut, sodass ich ihn nach einer kurzen Prüfung mit <code>hgh.py --site blog --upload</code> hochladen kann.</p>
<p>Wenn ich mir sicher bin, kann ich auch beide Schritte vereinen mit <code>hgh.py --site blog --deploy</code>.</p>

<h2 id="hugo-helper-herunterladen" data-numberify>Hugo Helper herunterladen<a class="anchor ms-1" href="#hugo-helper-herunterladen"></a></h2>
<p>Das Hugo Helper Script gibt es <a  class='urlextern'  href="https://code.cozy.town/natenom/hgh">hier</a>.</p>
<p>Viel Spaß damit. Oder eben nicht. ☺️</p>]]></content:encoded><enclosure url="https://natenom.de/2024/01/mein-hugo-helper-python-script-und-was-es-tun-kann/2024-01-09-beispiel-hgh-ff-cover.webp" length="74206" type="image/webp"/></item><item><title>Ein Python-Script für die Arbeit mit Hugo (Update 2024-01-09)</title><link>https://natenom.de/2022/03/python-script-fuer-die-arbeit-mit-hugo/</link><pubDate>Thu, 24 Mar 2022 05:35:39 +0100</pubDate><guid>https://natenom.de/2022/03/python-script-fuer-die-arbeit-mit-hugo/</guid><description><![CDATA[<p>Bei der <a  href="/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/">Umstellung meines Blogs auf Hugo</a> hatte ich mehrere Shell-Aliase in der <code>.bashrc</code> erstellt, um die Arbeit einfacher zu gestalten, wie z. B. eine tmux-Session im Verzeichnis der Website starten, nach Seitennamen, Kategorien und Tags zu suchen und einiges mehr. Es wurden immer mehr Aliase und es war nicht wirklich flexibel sondern nur richtig hacky.</p>]]></description><content:encoded><![CDATA[<p>Bei der <a  href="/2022/02/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/">Umstellung meines Blogs auf Hugo</a> hatte ich mehrere Shell-Aliase in der <code>.bashrc</code> erstellt, um die Arbeit einfacher zu gestalten, wie z. B. eine tmux-Session im Verzeichnis der Website starten, nach Seitennamen, Kategorien und Tags zu suchen und einiges mehr. Es wurden immer mehr Aliase und es war nicht wirklich flexibel sondern nur richtig hacky.</p>
<div class="shortcode-notice update">
    <div class="shortcode-notice-title update">
        Update</div>
    <div class="notice-content">Update (2024-01-09): Ich habe eine ganz neue Version des Python-Scripts veröffentlicht, das deutlich mehr kann, siehe <a  href="/2024/01/wofuer-ich-mein-hugo-helper-python-script-verwende-und-wo-man-es-findet/">in diesem Blogbeitrag</a>.</div>
</div>


<p>Spätestens seitdem ich auch <a  href="/2022/03/umzug-dokuwiki-hugo-1-vorarbeiten/">mein neues Wiki mit Hugo</a> nutze, funktionieren die vielen Aliase nicht mehr, denn ich bräuchte alles doppelt, um auch die Arbeit mit meinem Wiki damit bewerkstelligen zu können. Flexibel ist anders.</p>
<p>Und weil auch Vri in Zukunft in der Lage sein soll, sowohl im Wiki als auch im Blog Dinge zu tun, musste ich da was Schönes bauen. Denn meine vorherige Frickellösung könnte ich guten Gewissens niemandem zumuten.</p>
<p>Also habe ich heute Nacht ohne Ahnung und viel $Suchmaschine ein Python-Script erstellt, das die ganzen Shell-Aliase ersetzt und jetzt für beliebig viele Webseiten funktioniert. Und dabei habe ich sogar einen fiesen Bug in der <a  class='urlextern'  href="https://community.kde.org/Plasma">Plasmashell</a> gefunden.</p>

<h2 id="was-kann-das-script" data-numberify>Was kann das Script?<a class="anchor ms-1" href="#was-kann-das-script"></a></h2>
<p>Mit dem neuen Script kann ich sehr einfach:</p>
<ul>
<li>Eine Website generieren lassen.</li>
<li>Eine Website hochladen (mit rsync synchronisieren).</li>
<li>Die beiden oberen Dinge in einem Aufruf.</li>
<li>Eine Website lokal zur Verfügung stellen (<code>hugo server</code>).</li>
<li>Eine tmux-Session innerhalb des lokalen Verzeichnisses starten, um dort z. B. git zu verwenden.</li>
<li>(Nur im Blog) nach verwendeten Tags und nach Kategorien suchen. Dabei funktionieren sowohl einfache Strings als auch Reguläre Ausdrücke.</li>
<li>Mittels <code>grep -r</code> suchen.</li>
<li>Aktuelle Uhrzeit inklusive Datum und Zeitzone erhalten. Für das Front Matter (Metadaten einer einzelnen Seite).</li>
</ul>
<p>Hier z. B. die Suche nach allen Seiten im Blog, in denen der String <code>hugo</code> vorkommt:</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>[…]
</span></span><span style="display:flex;"><span>content/posts/2016/2016-12-02-hugo-kann-mehrsprachig.md,,Hugo kann mehrsprachig :),2016-12-02T13:29:05Z,0001-01-01T00:00:00Z,2016-12-02T13:29:05Z,false,/2016/12/hugo-kann-mehrsprachig/
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>content/posts/2015/2015-12-10-gpeasy-php-durch-hugo-statisches-html-ersetzt.md,,gpEasy (PHP) durch Hugo (statisches HTML) ersetzt,2015-12-10T13:05:11Z,0001-01-01T00:00:00Z,2015-12-10T13:05:11Z,false,/2015/12/gpeasy-php-durch-hugo-statisches-html-ersetzt/
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Format: path,slug,title,date,expiryDate,publishDate,draft,permalink
</span></span><span style="display:flex;"><span>Results for &#39;hugo&#39;: 27</span></span></code></pre></div>

<h3 id="externe-konfiguration" data-numberify>Externe Konfiguration<a class="anchor ms-1" href="#externe-konfiguration"></a></h3>
<p>Die Konfigurationsdatei mit den Einstellungen für beliebig viele Websites liegt in <code>~/.config/hugo-noms.conf</code>.</p>

<h3 id="hilfe" data-numberify>Hilfe<a class="anchor ms-1" href="#hilfe"></a></h3>
<p>Da das Script <a  class='urlextern'  href="https://docs.python.org/3/library/argparse.html">argparse</a> verwendet, gibt es automatisch eine schöne Hilfe: <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>usage: hg.py [-h] [--site SITE_NAME | --time | --printconfig | --sites]
</span></span><span style="display:flex;"><span>             [--cd | --build | --upload | --deploy | --tmux | --serve | --serve_light]
</span></span><span style="display:flex;"><span>             [--searchpost SEARCHPOST | --searchgrep SEARCHGREP | --searchtag SEARCHTAG | --searchcat SEARCHCAT]
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Handles hugo stuff.
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>optional arguments:
</span></span><span style="display:flex;"><span>  -h, --help            show this help message and exit
</span></span><span style="display:flex;"><span>  --site SITE_NAME      Name of the website to work on currently.
</span></span><span style="display:flex;"><span>  --time                Copy current date and time to clipboard.
</span></span><span style="display:flex;"><span>  --printconfig         Print the devices configuration.
</span></span><span style="display:flex;"><span>  --sites               Print sites from configuration
</span></span><span style="display:flex;"><span>  --cd                  Change directory to workdir of site.
</span></span><span style="display:flex;"><span>  --build               Build a site.
</span></span><span style="display:flex;"><span>  --upload              Build AND upload site to remote.
</span></span><span style="display:flex;"><span>  --deploy              Deploy (build AND upload) a site.
</span></span><span style="display:flex;"><span>  --tmux                Start the tmux session for --site.
</span></span><span style="display:flex;"><span>  --serve               Serves site (full).
</span></span><span style="display:flex;"><span>  --serve_light         Serves site (light).
</span></span><span style="display:flex;"><span>  --searchpost SEARCHPOST
</span></span><span style="display:flex;"><span>                        Find pages/posts containing search term in &#39;path, slug, title, date or permalink&#39;.
</span></span><span style="display:flex;"><span>                        Strings and Regular Expressions (regex) are allowed.
</span></span><span style="display:flex;"><span>  --searchgrep SEARCHGREP
</span></span><span style="display:flex;"><span>                        Find pages/posts containing search term in file content. Uses &#39;grep -r&#39;. Strings and
</span></span><span style="display:flex;"><span>                        Regular Expressions (regex) are allowed.
</span></span><span style="display:flex;"><span>  --searchtag SEARCHTAG
</span></span><span style="display:flex;"><span>                        Find tags containing search term. Strings and Regular Expressions (regex) are allowed.
</span></span><span style="display:flex;"><span>  --searchcat SEARCHCAT
</span></span><span style="display:flex;"><span>                        Find categories containing search term. Strings and Regular Expressions (regex) are
</span></span><span style="display:flex;"><span>                        allowed.</span></span></code></pre></div>

<h2 id="wo-gibts-das-script" data-numberify>Wo gibts das Script?<a class="anchor ms-1" href="#wo-gibts-das-script"></a></h2>
<p>Vielleicht kann das ja noch jemand gebrauchen. Ich weiß aktuell nicht, wo ich es hinschubsen könnte, daher liegt es jetzt erst einmal in meinem Wiki im neuen Bereich <code>Hugo</code>, <a  href="https://wiki.natenom.de/docs/sammelsurium/hugo/">siehe hier</a>.</p>

<h2 id="nur-noch-zwei-aliase" data-numberify>Nur noch zwei Aliase<a class="anchor ms-1" href="#nur-noch-zwei-aliase"></a></h2>
<p>Da ich ein extrem fauler Mensch bin, habe ich aber später trotzdem noch zwei Aliase in der <code>.bashrc</code> definiert:</p>
<pre><code>alias hgb='/pfad/zu/hg.py --site blog'
alias hgw='/pfad/zu/hg.py --site wiki'
</code></pre>
<p>Somit kann ich z. B.</p>
<pre><code>hg.py --site blog --tmux
</code></pre>
<p>abkürzen mit</p>
<pre><code>hgb --tmux
</code></pre>
<p>🙂</p>

<h2 id="bug-in-plasmashell" data-numberify>Bug in Plasmashell<a class="anchor ms-1" href="#bug-in-plasmashell"></a></h2>
<p>Ruft man ein Script mit diesen beiden Zeilen auf oder führt es in iPython aus, dann hängt sich die Plasmashell entweder für ein paar Sekunden, lange oder komplett auf. Der String landet trotzdem nicht in der Zwischenablage obwohl xclip als auch xsel installiert sind.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> pyperclip
</span></span><span style="display:flex;"><span>pyperclip<span style="color:#f92672">.</span>copy(<span style="color:#e6db74">&#34;text&#34;</span>)</span></span></code></pre></div>
<p>Ich wollte diese Funktion nutzen, um einen generierten String mit Datum, Uhrzeit und Zeitzone in die Zwischenablage zu kopieren, um diesen dann im Front Matter eines Blogbeitrags manuell über die Zwischenablage einfügen zu können. Stattdessen nutze ich jetzt <code>os.system(&quot;date … | xsel …&quot;)</code>.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>schlechtes Englisch darf behalten werden 🙂&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>]]></content:encoded></item><item><title>Weiterleitungen von alten WordPress-URLs auf Umlaut-URLs, wie Hugo sie erzeugt</title><link>https://natenom.de/2022/02/weiterleitungen-wordpress-url-nach-hugo-url-mit-umlauten/</link><pubDate>Sun, 13 Feb 2022 06:35:46 +0100</pubDate><guid>https://natenom.de/2022/02/weiterleitungen-wordpress-url-nach-hugo-url-mit-umlauten/</guid><description><![CDATA[Wie ich hier schon beschrieben habe, ersetzt Hugo bei URLs Umlaute nicht durch ihre Entsprechungen wie &ldquo;ae&rdquo;, &ldquo;oe&rdquo; usw, sondern behält sie bei. Ganz im Gegensatz zu WordPress.
Das bedeutet, dass z. B. die alte URL vom WordPress-Blog &ldquo;/tags/mobilitaet/&rdquo; in Hugo &ldquo;/tags/mobilität/&rdquo; heißt.
Ich hatte bereits am ersten Tag der Umstellung in ganz wenigen Fällen manuell Weiterleitungen erstellt, insgesamt nur drei.
Heute habe ich mich dann etwas damit beschäftigt, geprüft und festgestellt, dass es neben der Kategorie &ldquo;Mobilität&rdquo; noch 88 Tags mit Umlauten oder &ldquo;ß&rdquo; gibt.]]></description><content:encoded><![CDATA[<p>Wie ich <a  href="/2022/01/umzug-des-blogs-von-wordpress-zu-hugo-teil-1/#umlaute-in-urls-von-kategorien-und-tags">hier</a> schon beschrieben habe, ersetzt Hugo bei URLs Umlaute nicht durch ihre Entsprechungen wie &ldquo;ae&rdquo;, &ldquo;oe&rdquo; usw, sondern behält sie bei. Ganz im Gegensatz zu WordPress.</p>
<p>Das bedeutet, dass z. B. die alte URL vom WordPress-Blog &ldquo;/tags/mobilitaet/&rdquo; in Hugo &ldquo;/tags/mobilität/&rdquo; heißt.</p>
<p>Ich hatte bereits am ersten Tag der Umstellung in ganz wenigen Fällen manuell Weiterleitungen erstellt, insgesamt nur drei.</p>
<p>Heute habe ich mich dann etwas damit beschäftigt, geprüft und festgestellt, dass es neben der Kategorie &ldquo;Mobilität&rdquo; noch 88 Tags mit Umlauten oder &ldquo;ß&rdquo; gibt.</p>
<p>Ich hatte nicht wirklich Lust, das alles manuell einzugeben, und so habe ich ein bisschen Shell-Magic benutzt, um das zu automatisieren. Das will ich hier genau beschreiben.</p>

<h2 id="überlegungen" data-numberify>Überlegungen<a class="anchor ms-1" href="#überlegungen"></a></h2>

<h3 id="nur-am-anfang" data-numberify>Nur am Anfang<a class="anchor ms-1" href="#nur-am-anfang"></a></h3>
<p>Diese ganzen Weiterleitungen muss man natürlich nur am Anfang nach dem Umzug von WordPress nach Hugo bereitstellen. Irgendwann werden Suchmaschinen von selbst auf die neuen URLs mit Umlauten umspringen. Aber ich verstehe nix von SEO. Mir gehts darum, dass ich mal gelernt habe, dass URLs möglichst immer bestehen bleiben sollten.</p>

<h3 id="alle-urls-umschreiben-nicht-nur-tags" data-numberify>Alle URLs umschreiben, nicht nur Tags<a class="anchor ms-1" href="#alle-urls-umschreiben-nicht-nur-tags"></a></h3>
<p>Es wäre auch möglich, zusätzlich noch alle URLs herauszufischen und die dann auch weiterzuleiten.</p>

<h3 id="nur-je-wort-nicht-allgemein-möglich" data-numberify>Nur je &ldquo;Wort&rdquo;, nicht allgemein möglich<a class="anchor ms-1" href="#nur-je-wort-nicht-allgemein-möglich"></a></h3>
<p>Weiterleitungen, die Umlaute für sich umschreiben, wären wohl keine gute Idee, weil die Teilstrings &ldquo;ae&rdquo;, &ldquo;oe&rdquo;, &ldquo;ue&rdquo; und &ldquo;ss&rdquo; auch so in URLs vorkommen könnten. Deshalb muss man die einzelnen Begriffe rausfischen und die Weiterleitungen basierend auf diesen erstellen.</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>.*ss.* -&gt; .*ß.*
</span></span><span style="display:flex;"><span>.*oe.* -&gt; .*ö.*
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>keine gute Idee:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>essen -&gt; eßen
</span></span><span style="display:flex;"><span>oboe -&gt; obö</span></span></code></pre></div>
<p>Umgekehrt wäre das kein Problem.</p>

<h2 id="wie-es-geht" data-numberify>Wie es geht<a class="anchor ms-1" href="#wie-es-geht"></a></h2>

<h3 id="datei-1--die-aktuellen-tags-aus-hugo-auslesen" data-numberify>Datei 1 – Die aktuellen Tags aus Hugo auslesen<a class="anchor ms-1" href="#datei-1--die-aktuellen-tags-aus-hugo-auslesen"></a></h3>
<p>Ich verwende meinen <a  href="/2022/02/kategorien-und-tags-anzahl-vorkommen-hugo-anzeige-und-filter/">hier</a> beschriebenen Alias <code>hugo-search-tags</code>:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>hugo-search-tags -E <span style="color:#e6db74">&#34;(ä|ö|ü|ß)&#34;</span> | cut -d<span style="color:#e6db74">&#39;:&#39;</span> -f2 &gt; /tmp/umlaut-urls-hugo.txt</span></span></code></pre></div></p>
<p>Zum Verständis: Die Funktion hugo-search-tags gibt mir die Daten in diesem Format aus (<code>Anzahl:Tag</code>):
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>327:mobilität
</span></span><span style="display:flex;"><span>88:müll
</span></span><span style="display:flex;"><span>83:müllsammeln
</span></span><span style="display:flex;"><span>64:wälder
</span></span><span style="display:flex;"><span>51:landstraße
</span></span><span style="display:flex;"><span>51:fahrradanhänger
</span></span><span style="display:flex;"><span>33:überholen
</span></span><span style="display:flex;"><span>24:sonnenuntergänge
</span></span><span style="display:flex;"><span>[…]</span></span></code></pre></div></p>

<h3 id="datei-2--die-selben-tags-in-den-wordpress-stil-umwandeln" data-numberify>Datei 2 – Die selben Tags in den WordPress-Stil umwandeln<a class="anchor ms-1" href="#datei-2--die-selben-tags-in-den-wordpress-stil-umwandeln"></a></h3>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>hugo-search-tags -E <span style="color:#e6db74">&#34;(ä|ö|ü|ß)&#34;</span> | cut -d<span style="color:#e6db74">&#39;:&#39;</span> -f2 | sed -e <span style="color:#e6db74">&#34;s/ä/ae/g&#34;</span> -e <span style="color:#e6db74">&#34;s/ö/oe/g&#34;</span> -e <span style="color:#e6db74">&#34;s/ü/ue/g&#34;</span> -e <span style="color:#e6db74">&#34;s/ß/ss/g&#34;</span> &gt; /tmp/umlaut-urls-wordpress.txt</span></span></code></pre></div>

<h3 id="beide-dateien-vereinen" data-numberify>Beide Dateien vereinen<a class="anchor ms-1" href="#beide-dateien-vereinen"></a></h3>
<p>Jetzt kann man mit dem Shell Tool <code>paste</code> jede Zeile der einen Datei mit der selben Zeile der anderen Datei vereinen und als Trenner einen Doppelpunkt verwenden:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>paste -d<span style="color:#e6db74">&#39;:&#39;</span> umlaut-urls-wordpress.txt umlaut-urls-hugo.txt</span></span></code></pre></div></p>
<p>Das Ergebnis ist dann:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>mobilitaet:mobilität
</span></span><span style="display:flex;"><span>muell:müll
</span></span><span style="display:flex;"><span>muellsammeln:müllsammeln
</span></span><span style="display:flex;"><span>waelder:wälder
</span></span><span style="display:flex;"><span>landstrasse:landstraße
</span></span><span style="display:flex;"><span>fahrradanhaenger:fahrradanhänger
</span></span><span style="display:flex;"><span>ueberholen:überholen
</span></span><span style="display:flex;"><span>sonnenuntergaenge:sonnenuntergänge
</span></span><span style="display:flex;"><span>fruehling:frühling
</span></span><span style="display:flex;"><span>bussgeldstelle:bußgeldstelle
</span></span><span style="display:flex;"><span>[…]</span></span></code></pre></div></p>
<p>Links ist der String, wie er in WordPress verwendet wurde und rechts der von Hugo.</p>

<h3 id="konfiguration-für-nginx-erzeugen" data-numberify>Konfiguration für Nginx erzeugen<a class="anchor ms-1" href="#konfiguration-für-nginx-erzeugen"></a></h3>
<p>Diese Ausgabe wird nun mittels <code>sed</code> so abgewandelt, dass man direkt die Ausgabe bekommt, die man in die Nginx-Konfiguration eintragen kann. Und das automatisch für alle Tags mit Umlauten.</p>
<p>Der gewünschte für &ldquo;mobilität&rdquo; ist zum Beispiel:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rewrite ^/tags/mobilitaet(.*)$ /tags/mobilit_t$1 redirect;</span></span></code></pre></div></p>
<div class="shortcode-update">
<p>Update: Ich habe das Kommando angepasst, da die erste Version URLs von Blogbeiträgen zerstört hat, die den String eines Tags in der URL hatten, wie z. B. das Wort Frühling, für das es auch einen Tag gibt. Jetzt werden nur noch Tags erfasst.</p>
</div>

<p>Dies erreicht man mit diesem Kommando:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>paste -d&#39;:&#39; umlaut-urls-wordpress.txt umlaut-urls-hugo.txt | sed -E -e &#39;s_(.*):(.*)_rewrite ^/tags/\1(.*)$ /tags/\2$1 redirect;_g&#39;</span></span></code></pre></div></p>
<p><em>Anmerkung zu den Unterstrichen bei sed: Man kann als Trenner in sed fast beliebige Trennzeichen verwenden, solange sie innerhalb eines Ausdrucks immer gleich sind. Meist sieht man hier einen Schrägstrich.</em></p>
<p>Die Ausgabe ist:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-text" data-lang="text"><span style="display:flex;"><span>rewrite ^/tags/mobilitaet(.*)$ /tags/mobilität$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/muell(.*)$ /tags/müll$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/muellsammeln(.*)$ /tags/müllsammeln$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/waelder(.*)$ /tags/wälder$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/landstrasse(.*)$ /tags/landstraße$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/fahrradanhaenger(.*)$ /tags/fahrradanhänger$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/ueberholen(.*)$ /tags/überholen$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/sonnenuntergaenge(.*)$ /tags/sonnenuntergänge$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/fruehling(.*)$ /tags/frühling$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/bussgeldstelle(.*)$ /tags/bußgeldstelle$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/kaelte(.*)$ /tags/kälte$1 redirect;
</span></span><span style="display:flex;"><span>rewrite ^/tags/mehrplatzfuersrad(.*)$ /tags/mehrplatzfürsrad$1 redirect;
</span></span><span style="display:flex;"><span>[…]</span></span></code></pre></div></p>

<h2 id="nginx-neustarten" data-numberify>Nginx neustarten<a class="anchor ms-1" href="#nginx-neustarten"></a></h2>
<p>Das kann man nun in Nginx eintragen und schon funktionieren alte Links wieder richtig :)</p>
<p>Vorher vielleicht noch testen mit:
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>nginx -t
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
</span></span><span style="display:flex;"><span>nginx: configuration file /etc/nginx/nginx.conf test is successful</span></span></code></pre></div></p>
<p>Und Nginx neustarten.</p>
<p>Fertig. Alle Tags und Kategorien werden nun von den alten URLs auf die neuen von Hugo weitergeleitet.</p>
]]></content:encoded><enclosure url="https://natenom.de/2022/02/weiterleitungen-wordpress-url-nach-hugo-url-mit-umlauten/cover.jpg" length="792539" type="image/jpeg"/></item><item><title>Tooltip: Online tool for testing regular expressions</title><link>https://natenom.de/2016/01/tooltip-online-tool-for-testing-regular-expressions/</link><pubDate>Thu, 14 Jan 2016 16:00:46 +0000</pubDate><guid>https://natenom.de/2016/01/tooltip-online-tool-for-testing-regular-expressions/</guid><description>Every expression is explained via „mouse over“. Shows the matches inside your text. You can share your expressions and your text. http://regexr.com/</description><content:encoded><![CDATA[<ul>
<li>Every expression is explained via „mouse over“.</li>
<li>Shows the matches inside your text.</li>
<li>You can share your expressions and your text.</li>
</ul>
<p><a  class='urlextern'  href="http://regexr.com/">http://regexr.com/</a></p>
]]></content:encoded></item><item><title>WordPress: Selbst eingefügte „Weiterlesen“-Links in allen Artikeln mit Hilfe von „Search Regex“ deaktivieren</title><link>https://natenom.de/2014/03/wordpress-selbst-eingefuegte-weiterlesen-links-in-allen-artikeln-mit-hilfe-von-search-regex-deaktivieren/</link><pubDate>Sun, 09 Mar 2014 19:18:32 +0000</pubDate><guid>https://natenom.de/2014/03/wordpress-selbst-eingefuegte-weiterlesen-links-in-allen-artikeln-mit-hilfe-von-search-regex-deaktivieren/</guid><description>&lt;p>Habe hier vor einiger Zeit damit begonnen, in alle „längeren“ Artikel manuell einen „Weiterlesen“-Link einzufügen, sodass man erst diesen anklicken musste, um den ganzen Artikel zu lesen. Glaube langsam, dass das keine gute Idee war, weil man so viel „Nebenbei“-Content nicht sieht und vor allem: Mir gefällt es so nicht mehr.&lt;/p></description><content:encoded><![CDATA[<p>Habe hier vor einiger Zeit damit begonnen, in alle „längeren“ Artikel manuell einen „Weiterlesen“-Link einzufügen, sodass man erst diesen anklicken musste, um den ganzen Artikel zu lesen. Glaube langsam, dass das keine gute Idee war, weil man so viel „Nebenbei“-Content nicht sieht und vor allem: Mir gefällt es so nicht mehr.</p>
<p>Da ich mir nicht unbedingt die Zeit nehmen möchte, jeden Artikel einzeln zu ändern und dieser „Weiterlesen“-Link letztlich nur ein ausgewerteter <a  class='urlextern'  href="http://www.w3schools.com/tags/tag_comment.asp"title="HTML comment tag">HTML-Kommentar</a> ist, wurde das Plugin <a  class='urlextern'  href="http://wordpress.org/plugins/search-regex/"title="WordPress › Search Regex « WordPress Plugins">Search Regex</a> genutzt. Damit kann man in Artikeln alle Vorkommen von Zeichenkette A durch Zeichenkette B ersetzen lassen; in unserem Fall „&lt;!–more–&gt;“ durch „&lt;!–offmore–&gt;“:</p>
<figure id="attachment_26932" aria-describedby="caption-attachment-26932" style="width: 600px" class="wp-caption alignnone">[<img loading="lazy" class="size-large wp-image-26932" src="/wp-content/uploads/2014/03/wordpress_search_regex_offmore-600x265.png" alt="Search Regex – Suchmaske" srcset="/wp-content/uploads/2014/03/wordpress_search_regex_offmore-600x265.png 600w, /wp-content/uploads/2014/03/wordpress_search_regex_offmore-150x66.png 150w, /wp-content/uploads/2014/03/wordpress_search_regex_offmore-300x132.png 300w, /wp-content/uploads/2014/03/wordpress_search_regex_offmore.png 731w" sizes="(max-width: 600px) 100vw, 600px" />][3]<figcaption id="caption-attachment-26932" class="wp-caption-text">Search Regex – Suchmaske</figcaption></figure>
<p>Es ist übrigens egal, was man vor „more“ einfügt.  Etwas dahinter anzufügen funktioniert nicht.</p>
<p>Man kann die Zeichenkette auch komplett durch „“ (nichts) ersetzen, aber ich wollte die Möglichkeit haben, wieder zurück zu wechseln, so als Backup.</p>
<p>Für eine Vorschau der Änderungen klickt man auf „Replace“. Sieht alles in Ordnung aus, klickt man auf „Replace &amp; Save“, kurz danach wird die Anzahl der Ersetzungen oben angezeigt:</p>
<figure id="attachment_26931" aria-describedby="caption-attachment-26931" style="width: 289px" class="wp-caption alignnone">[<img loading="lazy" class="size-full wp-image-26931" src="/wp-content/uploads/2014/03/wordpress_search_regex_offmore_replaced.png" alt="Search Regex – 178 Stellen wurden ersetzt" srcset="/wp-content/uploads/2014/03/wordpress_search_regex_offmore_replaced.png 289w, /wp-content/uploads/2014/03/wordpress_search_regex_offmore_replaced-150x48.png 150w" sizes="(max-width: 289px) 100vw, 289px" />][4]<figcaption id="caption-attachment-26931" class="wp-caption-text">Search Regex – 178 Stellen wurden ersetzt</figcaption></figure>
<p>Fertig.</p>]]></content:encoded></item></channel></rss>