카테고리 보관물: Unix

Unix

콜론 앞에 Sed를 사용하여 모든 문자를 바꾸는 방법은 무엇입니까? 방법 hd_ma_prod_customer_ro:*:123456789:john.doe john.doe와 함께 기본적으로 마지막 콜론 (:)을 찾아서 포함하기

다음 문자열을 바꾸는 방법

hd_ma_prod_customer_ro:*:123456789:john.doe

john.doe와 함께

기본적으로 마지막 콜론 (:)을 찾아서 포함하기 전에 모든 것을 삭제해야합니다.



답변

실제로 의미하는 것은 마지막 콜론까지 모든 것을 삭제하고 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의 설명 에 따라 아래 awkNF변수를 사용하여 마지막 열만 인쇄하는 데 사용할 수 있습니다 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:

awk -F: '{ print $NF }'

답변

시도하십시오

편집 : 앵커 제거

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

삭제

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

답변