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 sed
und 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
pattern
die Variable erhöht und der Ersatz wird durchgeführtrepl
- Am Ende beenden Sie mit
logical not
der Variable (wennrepl
sie Null ist, beenden Sie mit dem Status1
).
Alternative – grep
die 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