パターンが存在しない場合、文字列を殺さずに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]+$//'

関連情報