sed : 일치하는 그룹 만 인쇄
마지막 두 숫자 (1 개의 정수, 1 개의 부동 소수점, 공백)를 선택 인쇄 만하고 싶습니다.
예 :
foo bar <foo> bla 1 2 3.4
인쇄해야합니다 :
2 3.4
지금까지 다음과 같은 내용이 있습니다.
sed -n 's/\([0-9][0-9]*[\ \t][0-9.]*[\ \t]*$\)/replacement/p'
나에게 줄거야
foo bar <foo> bla 1 replacement
그러나 그룹 1로 바꾸려고하면 전체 줄이 인쇄됩니다.
sed -n 's/\([0-9][0-9]*[\ \t][0-9.]*[\ \t]*$\)/\1/p'
그룹의 정규 정렬과 일치하는 줄 섹션 만 인쇄 할 어떻게해야합니까?
전체 줄과 일치하는 .*
정규 서식의 시작 부분에 a 를 추가 합니다. 이로 인해 전체 줄이 그룹의 내용으로 바둑니다.
echo "foo bar <foo> bla 1 2 3.4" |
sed -n 's/.*\([0-9][0-9]*[\ \t][0-9.]*[ \t]*$\)/\1/p'
2 3.4
grep 은 추출에 결과 도구입니다.
귀하의 예와 정규식을 사용하여 :
kent$ echo 'foo bar <foo> bla 1 2 3.4'|grep -o '[0-9][0-9]*[\ \t][0-9.]*[\ \t]*$'
2 3.4
그리고 또 다른 옵션으로, 나는 awk와 함께 갈 것입니다!
echo "foo bar <foo> bla 1 2 3.4" | awk '{ print $(NF-1), $NF; }'
이 공백으로 입력을 나누고 (여기서는 STDIN을 사용하고 입력합니다. 마지막-한-한 필드와 마지막 필드를 인쇄합니다. $NF
변수 필드의 수는 공간의 폭발 후 발견 잡아.
이것의 장점은 마지막 두 필드 만 계속 바뀌면 마지막 두 필드가 바뀌는 것이 중요하지 않다는 것입니다.
절단 명령은이 정확한 상황을 위해 설계되었습니다. 구분 기호를 "잘라 내고"어느 청크를 어느 정도인지 수 있습니다.
예를 들어 : echo "foo bar <foo> bla 1 2 3.4" | cut -d " " -f 6-7
결과는 다음과 가변적입니다. 2 3.4
-d는 구분 해 설정합니다
-f는 출력 할 '경우'범위를 선택합니다.이 경우에는 6 ~ 7 번째 청크입니다. 범위를 목록으로 만들 수도 있습니다 (예 :) 6,7
.
참고 URL : https://stackoverflow.com/questions/17511639/sed-print-only-matching-group
'IT' 카테고리의 다른 글
RDL LC over RDL 보고서를 언제 사용합니까? (0) | 2020.07.24 |
---|---|
WSDL을 사용하는 방법 (0) | 2020.07.24 |
AngularJS 서비스에 모의 배치 (0) | 2020.07.24 |
여러 줄 문자에 줄임표 적용 (0) | 2020.07.24 |
대체에서 데이터 유형을 변경하는 방법 (0) | 2020.07.24 |