Sed를 사용하여 콜론 앞의 모든 문자를 바꾸는 방법은 무엇입니까?

Sed를 사용하여 콜론 앞의 모든 문자를 바꾸는 방법은 무엇입니까?

다음 문자열을 바꾸는 방법

hd_ma_prod_customer_ro:*:123456789:john.doe

존 도와 함께

기본적으로 마지막 콜론(:)을 찾아서 그 앞의 모든 항목(포함)을 삭제해야 합니다.

답변1

실제로 마지막 콜론까지 모든 것을 제거하고 그대로 유지하려고 한다고 가정합니다 john.doe.

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
  sed 's/.*://'

설명하다:

첫 번째 줄은 예시 목적으로 테스트 문자열을 파이프합니다 sed.

두 번째는 기초다.sed치환. 첫 번째와 두 번째 사이의 부분은 /검색할 정규식이고 두 번째와 세 번째 사이의 부분은 대체할 항목입니다(이 경우 삭제 중이므로 아무것도 없습니다).

정규 표현식의 경우 .임의의 문자와 일치하고 *횟수에 관계없이 반복되며(0 포함) :콜론과 일치합니다. 따라서 콜론이 뒤에 오는 것은 무엇이든 됩니다. 콜론이 포함될 수 있으므로 .*일치 항목은 "탐욕적"이며 마지막 콜론까지의 모든 항목을 포함합니다.

답변2

또 다른 사용 방법 awk:

awk -F: '{ print $NF }'

답변3

sed -r 's/:/\t/g' filename | awk -F'\t' '{print $4}'

나는 모든 발생을 대체하고 있습니다:상표awk그런 다음 john.doe 문자열을 추출하는 데 사용합니다 .

파일이 없으면 시도해 볼 수 있습니다.

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | 
awk -F'\t' '{print $4}'

Graeme의 의견에 따르면 awk다음 변수를 사용하여 마지막 열을 개별적으로 인쇄할 수 있습니다.NFawk

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | sed -r 's/:/\t/g' | awk -F'\t' '{print $NF}'

불필요한 부분을 제거하기 위해 Graeme의 의견을 병합했습니다.sed

명령은 다음과 같이 수정할 수 있습니다.

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' | awk -F':' '{print $NF}'

답변4

시도해 보세요

echo 'abc:fjk' |sed 's/.*:/john.doe/g'

삭제하고

echo 'abc:fjk' |sed 's/.*://g'

관련 정보