User Tools

Site Tools


snippets:shell

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

snippets:shell [2025-06-25 20:09] – Seite mit den Abschnitten „OpenSSH“ und „journalctl“ erstellt malte70snippets:shell [2025-11-12 01:28] (current) – Snippet „Einrückung ab der zweiten Zeile“ im neuen Abschnitt „Textverarbeitung“ hinzugefügt. malte70
Line 81: Line 81:
  --follow \  --follow \
  --unit=NetworkManager.service  --unit=NetworkManager.service
 +</code>
 +
 +===== Textverarbeitung =====
 +
 +**TODO: Einführungstext**
 +
 +==== Einrückung ab der zweiten Zeile ====
 +
 +Mit dem folgenden ''sed''-Befehl lässt sich jede Zeile eines Textes leicht einrücken:
 +
 +<code bash>
 +sed "s/^/    /" input.txt
 +</code>
 +
 +Aber was ist, wenn die Einrückung erst ab der zweiten Zeile erscheinen soll?
 +
 +Im folgenden Beispiel soll eine mehrzeilige Meldung in eine Logdatei geschrieben werden: Vor der ersten Zeile soll der Zeitstempel stehen, jede weitere Zeile soll mit Leerzeichen um die Länge des Zeitstempel-Prefix eingerückt werden.
 +
 +Dafür wird der Text von einem kleinen ''awk''-Skript verarbeitet, das abhängig von der Zeilennummer (in der Variable ''NR'' gespeichert) entweder die Original-Zeilr wieder ausgibt, oder eben mit einem Prefix.
 +
 +<code bash>
 +# Die zu loggende Nachricht
 +msg="This is a message
 +with multiple lines."
 +
 +
 +# Zeitstempel und dessen Länge
 +timestamp=$(date --iso-8601=seconds)
 +timestamp_length=$(echo -n "$timestamp" | wc -c)
 +
 +# Der Prefix für alle Zeilen außer der ersten.
 +# Enthält $timestamp_length mal ein Leerzeichen, plus vier weitere für die Klammern und Leerzeichen vor und nach dem Zeitstempel
 +line_prefix=$(yes " " | head -$((timestamp_length + 4)) | tr -d "\n")
 +
 +
 +# Der Zeitstempel ohne abschließenden Zeilenumbruch
 +printf "[${timestamp}]  "
 +
 +# Ausgabe der Nachricht $msg inklusive Prefix
 +# Das awk-Skript prüft eine if-Klausel ob die Zeilennummer NR mindestens 2 ist, und gibt dann die ursprüngliche Zeile $0 mit einem Prefix aus, und falls nicht ohne den Prefix.
 +
 +# Lesbare Variante mit Zeilenumbrüchen und Einrückungen:
 +echo "${msg}" | awk "{
 + if (NR >= 2) {
 + print \"${line_prefix}\"$0;
 + } else {
 + print $0;
 + }
 +}"
 +
 +# Kompakte Variante in einer einzelnen Zeile:
 +echo "${msg}" | awk "{ if (NR >= 2) { print \"${line_prefix}\"$0; } else { print $0;} }"
 </code> </code>
  
snippets/shell.txt · Last modified: by malte70