실시간으로 특정 줄의 특정 텍스트 자르기

실시간으로 특정 줄의 특정 텍스트 자르기

그래서 실시간으로 실행되는 로그가 있고 "test.txt"라는 텍스트 파일에 실시간으로 저장되었습니다. 이제 이 텍스트 파일의 변경 사항을 지속적으로 폴링하고 반복되는 특정 데이터 비트를 제거하는 프로세스를 구축하고 싶습니다. 예를 들어 로그는 다음과 같습니다.

Feb  9 11:43:24 dnsmasq[887]: query[A] captive.g.aaplimg.com from 192.168.178.21
Feb  9 11:43:24 dnsmasq[887]: forwarded captive.g.aaplimg.com to 8.8.4.4
Feb  9 11:43:24 dnsmasq[887]: reply captive.g.aaplimg.com is 17.253.55.202
Feb  9 11:43:24 dnsmasq[887]: reply captive.g.aaplimg.com is 17.253.57.211
Feb  9 11:43:54 dnsmasq[887]: query[A] captive.g.aaplimg.com from 192.168.178.21

출력 텍스트가 다음과 같도록 query[A]가 있는 행에서만 정보를 제거하고 싶습니다.

11:43 captive.g.aaplimg.com

그러나 문제는 이 로그 줄에 다른 URL이 추가되어 있다는 것입니다. 예를 들어 다음과 같습니다.

Feb  9 11:49:56 dnsmasq[887]: query[A] www.googleapis.com from 192.168.178.21

그런 다음 출력을 다음과 같이 원합니다.

11:49 www.googleapis.com

하지만 텍스트 파일/로그가 업데이트되므로 실시간으로 발생해야 합니다.

Pi에서 Debian Buster를 실행합니다.

답변1

tail -F test.txt | 
   perl -nE 'say "$+{time} $+{url}" if /(?<time>\d{2}:\d{2}):\d{2} dnsmasq\S+: query\S+ (?<url>\S+) from /'

tail -F("아래")가 추가된 행을 계속 찾습니다 test.txt.

일치하는 줄을 필터링 perl하고 추출합니다(그리고 세그먼트를 사용하여 정규식의 일부를 캡처합니다 (?<named_capture>...)).

관련 정보