Verwenden Sie sed, um ein Shell-Skript auszuführen, wenn die Suche fehlschlägt

Verwenden Sie sed, um ein Shell-Skript auszuführen, wenn die Suche fehlschlägt

ich mache

sed "s/test1/replacetext" testfile.txt

Ich versuche, /q zu verwenden, da „test1“ nicht gefunden werden kann, und ein Shell-Skript auszuführen. Wie kann ich das tun? Danke, Nate

Antwort1

Mit GNU sedund mehreren Eingabezeilen:

sed -n '/pattern/{h;s//replacement/;};p;${g;//!q1;}' file
  • In Zeilen, die enthalten pattern:
    • Fügen Sie die Zeile zum Haltepuffer hinzu
    • Ersetzung durchführen
  • jede Zeile drucken
  • Wenn die letzte Zeile ( $) erreicht ist:
    • Holen Sie sich den Hold-Puffer
    • Wenn der Musterraum nicht enthält pattern, beenden Sie mit dem Exit-Code1
  • Leere reguläre Ausdrücke //verwenden das zuletzt verwendete Regex-Muster

Alternative – awk:

awk 'END{exit !repl} /pattern/{repl++; sub(/pattern/,"replacement")} 1' file
  • Wenn eine Zeile enthält , wird patterndie Variable erhöht und der Ersatz wird durchgeführtrepl
  • Am Ende beenden Sie mit logical notder Variable (wenn replsie Null ist, beenden Sie mit dem Status 1).

Alternative – grepdie Eingabe erfolgt vorab, zB:

if grep -q 'pattern' file; then
    # input contains pattern - do sed replacement
    sed 's/pattern/replacement/' file
else
    : input does not contain pattern - execute shell script
fi

verwandte Informationen