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}'

나는 모든 발생을 대체하고 있습니다:그런 다음 awkjohn.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'

관련 정보