다음 문자열을 바꾸는 방법
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
다음 변수를 사용하여 마지막 열을 개별적으로 인쇄할 수 있습니다.NF
awk
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'