Как правильно обрезать строку с помощью sed и не уничтожить строку, если шаблона нет?

Как правильно обрезать строку с помощью sed и не уничтожить строку, если шаблона нет?

Я пишу функцию, в zshкоторой есть строка

"find . -a -print:10"

часть :10нужно обрезать справа. Это может измениться в будущем, чтобы стать :23или т. д., так что, похоже , нужен :77шаблон типа .:[0-9]+

также строка может иметь вид

find . -a -print

В этом случае, если на конце нет :[0-9]+рисунка, то строку следует оставить без изменений.

так

  • find . -a -print:10должен стать find . -a -print
    и
  • find . -a -printдолжен оставаться таким, как естьfind . -a -print

Что я уже пробовал

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

Если я попробую

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

но то же самое sedвыражение

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

Как мне правильно обрезать эту строку?

решение1

Зачем вы его используете, -nесли не хотите подавлять вывод по умолчанию?

Просто используйте:

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

Связанный контент