답변:
실제로 의미하는 것은 마지막 콜론까지 모든 것을 삭제하고 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:
않습니까?