Wie kann ich einen String mit sed richtig kürzen – und den String nicht löschen, wenn das Muster nicht vorhanden ist?

Wie kann ich einen String mit sed richtig kürzen – und den String nicht löschen, wenn das Muster nicht vorhanden ist?

Ich schreibe eine Funktion, zshdie eine Zeichenfolge hat

"find . -a -print:10"

der :10Teil muss rechts abgeschnitten werden. Dies kann sich in Zukunft ändern und wird zu :23oder :77usw., daher scheint ein Muster wie :[0-9]+dieses erforderlich zu sein.

außerdem könnte die Zeichenfolge die Form haben

find . -a -print

Wenn :[0-9]+am Ende kein Muster vorhanden ist, sollte die Zeichenfolge unverändert bleiben.

Also

  • find . -a -print:10sollte werden find . -a -print
    und
  • find . -a -printsollte bleiben alsfind . -a -print

Was ich bisher versucht habe

% sed -nr 's/(.*)(:[0-9]+)?/\1/p' <<<'find . -a -print:10'
find . -a -print:10     # ':10' not getting trimmed

Wenn ich es versuche

sed -nr 's/(.*)(:[0-9]+)/\1/p' <<<'find . -a -print:10'
find . -a -print  # ':10' getting trimmed GOOD ✔✔ 

aber der gleiche sedAusdruck

 sed -nr 's/(.*)(:[0-9]+)/\1/p' <<<'find . -a -print'
 # no output

Wie kann ich diese Zeichenfolge richtig kürzen?

Antwort1

Warum verwenden Sie -n, wenn Sie die Standardausgabe nicht unterdrücken möchten?

Benutz einfach:

sed -E -e 's/:[0-9]+$//'

verwandte Informationen