그럼 grep이나 sed를 해야 하나요?

그럼 grep이나 sed를 해야 하나요?

방금 에 대해 질문이 있었습니다 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

관련 정보