패턴이 존재하지 않는 경우 문자열을 죽이지 않고 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]+$//'

관련 정보