[unix] sed를 사용하여 콜론이 처음 나타날 때까지 삭제

내 sed 명령은

 sed '/(.*:)/d' <<< 'abcd:bcde:cdeaf'

돌아와야합니다

bcde:cdeaf

(즉) 줄에서 첫 번째 콜론 앞의 모든 문자와 콜론 자체를 제거해야합니다.

그러나 이것은 아무것도 제거하지 않습니다.

나의 혼란은 주로

1) sed 정규식 내에서 패턴 일치에 대한 parens를 이스케이프해야합니까?

2) 두 경우 모두 (탈출 / 비 탈출) 작동하지 않습니다. 나는 시도했다

sed -E '/\\(.*:\\)/d' <<< 'abcd:bcde'



답변

$ echo 'abcd:bcde:cdeaf' | sed 's/^[^:]*://g'
bcde:cdeaf

첫 번째 ^는 줄의 시작을 의미합니다. 은 [^:]내가 작성하는 방법을 알고 바로 유일한 방법입니다 하지 콜론 . 는 *콜론 뒤에 의미 바로 내 앞에 일의 수 (이 케이스하지-대장을). 마지막으로 :콜론을 선택합니다.

다시 말해, 줄의 시작, 콜론이 아닌 많은 수, 첫 번째 콜론을 선택하십시오.

//g수단은 모든 일치하는 인스턴스를 삭제합니다.


답변

열로 작동하려면 다음이 있습니다 cut.

echo 'abcd:bcde:cdeaf' | cut -d: -f2-

똑같이

echo 'abcd:bcde:cdeaf' | cut -d: -f1 --complement

그리고 다른 버전 sed(빅 데이터의 경우 더 빠름) :

echo 'abcd:bcde:cdeaf' | sed 's/^://;t;s/:/\n:/;D'

오히려 이국 bash

echo 'abcd:bcde:cdeaf' | { IFS=: read -r first last ; echo "$last" ; }

또는

echo 'abcd:bcde:cdeaf' | { read -r line ; echo ${line#*:} ; }

또는

echo 'abcd:bcde:cdeaf' | { IFS=: read -a a ; printf '%b:' "${a[@]:1}\c" ; echo ;}


답변