콜론 앞에 Sed를 사용하여 모든 문자를 바꾸는 방법은 무엇입니까?


25

다음 문자열을 바꾸는 방법

hd_ma_prod_customer_ro:*:123456789:john.doe

john.doe와 함께

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

답변:


40

실제로 의미하는 것은 마지막 콜론까지 모든 것을 삭제하고 john.doe그대로 남겨두고 싶다는 가정입니다 .

echo 'hd_ma_prod_customer_ro:*:123456789:john.doe' |
  sed 's/.*://'

설명:

첫 번째 줄은 테스트 문자열을 sed예를 들어 파이프 합니다.

두 번째는 기본 sed대체 입니다. 첫 번째와 두 번째 사이의 부분은 /검색 할 정규식 이고 두 번째와 세 번째 사이의 부분은 그것을 대체 할 것입니다 (이 경우에는 삭제하지 않습니다).

정규식의 경우 .모든 문자와 일치 *하고이 숫자를 0 회를 포함하여 여러 번 반복 :하며 콜론 과 일치합니다. 따라서 효과적으로 콜론이 뒤 따릅니다. .*콜론을 포함 할 수 있으므로 일치 항목은 '욕심'이며 마지막 콜론까지의 모든 항목이 포함됩니다.


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

1
당신이 사용하려고한다면 awk, 왜 그렇게하지 awk -F:않습니까?
Graeme

@Graeme, 나는 아직도 그렇게 편안하지 않습니다 awk. 기본적으로, 나는 원래 내 대답에있는 명령을 테스트하고 사용자의 요구 사항에 따라 수정하려고합니다. :)
Ramesh

3
-F위한 옵션 awk을 지정 필드 분리. 당신이 말한다면 awk콜론을 사용, 탭 콜론을 교체 할 필요가 없다. 또한 $NF대신에 사용할 수있는 마지막 필드를 얻으려면 $4항상 3 개의 콜론이없는 경우 작동합니다.
Graeme

@Graeme, 나는 당신이 언급 한 변경 사항을 통합했습니다. 이것이 좋은지 알려주세요 :)
Ramesh

예, 완벽하게 작동합니다!
Graeme


2

시도하십시오

편집 : 앵커 제거

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

삭제

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

그것은 OP가 요구하는 것이 아닙니다
iruvar

질문을 다시 읽으십시오.
akash

글쎄, 당신은 내 의견 후 삭제에 몰래, 상관 없어
iruvar

아 그렇구나 나의 사과 1_CR
akash

1
^앵커 중 하나를 질문의 경우, 또는 예를 들어, 경우에 차이가 없습니다. 로 시작하는 주소는 /.*이미을 의미합니다 ^.
mikeserv 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.