내 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 ;}