답변:
실제로 의미하는 것은 마지막 콜론까지 모든 것을 삭제하고 john.doe그대로 남겨두고 싶다는 가정입니다 .
echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
sed 's/.*://'
첫 번째 줄은 테스트 문자열을 sed예를 들어 파이프 합니다.
두 번째는 기본 sed대체 입니다. 첫 번째와 두 번째 사이의 부분은 /검색 할 정규식 이고 두 번째와 세 번째 사이의 부분은 그것을 대체 할 것입니다 (이 경우에는 삭제하지 않습니다).
정규식의 경우 .모든 문자와 일치 *하고이 숫자를 0 회를 포함하여 여러 번 반복 :하며 콜론 과 일치합니다. 따라서 효과적으로 콜론이 뒤 따릅니다. .*콜론을 포함 할 수 있으므로 일치 항목은 '욕심'이며 마지막 콜론까지의 모든 항목이 포함됩니다.
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}'
awk. 기본적으로, 나는 원래 내 대답에있는 명령을 테스트하고 사용자의 요구 사항에 따라 수정하려고합니다. :)
-F위한 옵션 awk을 지정 필드 분리. 당신이 말한다면 awk콜론을 사용, 탭 콜론을 교체 할 필요가 없다. 또한 $NF대신에 사용할 수있는 마지막 필드를 얻으려면 $4항상 3 개의 콜론이없는 경우 작동합니다.
시도하십시오
편집 : 앵커 제거
echo 'abc:fjk' |sed 's/.*:/john.doe/g'
삭제
echo 'abc:fjk' |sed 's/.*://g'
^앵커 중 하나를 질문의 경우, 또는 예를 들어, 경우에 차이가 없습니다. 로 시작하는 주소는 /.*이미을 의미합니다 ^.
awk, 왜 그렇게하지awk -F:않습니까?