
방금 에 대해 질문이 있었습니다 grep
. 항목이 많은 텍스트 파일이 있는데 특정 숫자만 인쇄하고 싶습니다. 이게 내 텍스트인데 700
인쇄하고 싶어요 ...
Dato: 22-02-2018
Mødt ind: 700
Gået hjem: 1600
Overtid:
답변1
파일의 구조가 간단하고 레코드를 쉽게 구별할 수 있으며 그 중 하나의 값을 원하므로 다음을 사용하는 것이 가장 쉬울 것입니다 awk
.
awk '/^Mødt ind:/ { print $NF }' file
이는 /^Mødt ind:/
text 로 시작하는 모든 줄에 대해 다음 블록이 실행됨을 의미합니다 Mødt ind:
. 이 블록은 $NF
행의 마지막 필드 값인 를 인쇄합니다( NF
마지막 필드의 필드 번호이고 $
필드 값은 그 앞에 배치됩니다).
표준 sed
:
sed -n 's/^Mødt ind: \(.*\)/\1/p' file
이는 동일한 줄 match 를 수행 awk
하지만 해당 줄의 내용을 콜론과 공백 뒤에 오는 내용으로 바꿉니다. 일반 출력은 비활성화 -n
되고 표현식에 의해 수정된 라인만 출력됩니다.
awk
더 읽기 쉽고 이해/수정하기 쉽기 때문에 여전히 솔루션을 찾고 있습니다 .
답변2
sed
짐작하셨듯이 이 문제는 단독으로 처리할 수 있습니다.
sed 's/.*ind:\ \(.*\)/\1/;tx;d;:x'
이는 검색 및 바꾸기 작업입니다.
.*ind:\ \(.*\)
임의의 문자로 시작하고 그 뒤에 (이스케이프된 공백)이 오는 줄을 검색합니다 ind:
. \(.*\)
나머지 줄을 "일치" 하는 데 사용되고 첫 번째 일치 항목에 저장되면 전체 줄이 다음으로 대체됩니다 \1
. 다음과 같이 작동합니다 ;tx;d;:x
. tx
교체가 성공하면 레이블 x로 분기하고 레이블 x의 태그인 d
줄을 삭제합니다 .:x