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]+$//'

관련 정보