첫 번째 콜론이 나타날 때까지 sed를 사용하여 삭제합니다.

첫 번째 콜론이 나타날 때까지 sed를 사용하여 삭제합니다.

내 sed 명령은

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

그것은 돌아와야 한다,

bcde:cdeaf

(즉, 줄의 첫 번째 콜론 앞에 있는 모든 문자는 물론 콜론 자체도 제거해야 합니다.

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

내 혼란은 주로 다음과 같습니다.

1) 패턴 일치에 사용되는 대괄호는 sed 정규식 내에서 이스케이프되어야 합니까?

2) 두 경우 모두 (이스케이프 포함/이스케이프 없음) 작동하지 않습니다. 나는 노력했다.

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

답변1

d의 명령은 sed전체 줄을 삭제합니다. 여기서 사용되는 것은 s(대체) 명령입니다.

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

[^:]"콜론 아님"을 쓰는 방법입니다 . *콜론이 아닌 표현 뒤에 오는 것은 "내 앞에 있는 모든 것"입니다(이 경우 콜론이 아님). 마지막으로 :콜론을 선택합니다.

일치는 항상 왼쪽에서 오른쪽으로 탐욕적인 방식으로 발생하므로 주어진 문자열의 첫 번째 부분은 첫 번째 콜론까지 일치하는 것이 보장됩니다.

즉, 콜론과 첫 번째 콜론이 아닌 것을 원하는 만큼 선택하세요.

//일치하는 하위 문자열을 아무것도 없는 것으로 바꾸는(즉, 제거하는) 메서드입니다.

답변2

열에 대해 작업하려면 다음이 있습니다 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 ;}

관련 정보