2016-12-22 3 views
0

파일이있어서 데이터를 추출해야합니다. 내가 직면하고있는 문제는 일부 라인이 다른 라인과 거의 같지 않다는 것입니다.리눅스에서 텍스트 파일의 데이터를 추출하십시오.

action=accept trandisp=noop srcip=1.1.1.1 dstip=2.2.2.2 service=PING proto=1 duration=61 
action=accept trandisp=noop srcip=1.1.1.1 dstip=3.3.3.3 dstport=80 service=http proto=1 duration=61 

내가 첫 번째 행에서 서비스 대상 IP를 얻으려면, 두 번째 줄에 dstport 및 서비스와 목적지 IP : 여기에 예입니다.

저는 리눅스가 처음이에요. grep로 시도해 봤지만 저에게는 효과가 없었습니다. 답변에 대한 설명을 도와주세요.

+1

시도해 보셨습니까? 또한 [this] (http://stackoverflow.com/questions/17291557/extract-strings-in-a-text-file-using-grep) 도움이 될 수도 있습니다. –

+0

'gawk' (또는 아마도'perl') , 또는 아마도'sed' –

답변

0

어떨까요?
grep -o -P "dstip=[0-9.]+ (dstport=[0-9]+)? service=\w+ (dstport=[0-9]+)?" your-file

설명 : 물론

-o, --only-matching  show only the part of a line matching PATTERN 
-P, --perl-regexp   PATTERN is a Perl regular expression 

, 키와 값의 순서 문제.

+0

이것은 펄 정규식입니다. '+'는 하나 이상을 의미하며'[0-9.] '에 적용됩니다. '? '는 none 또는 one을 의미하며'(dstport = [0-9] + service = \ w +)'에 적용됩니다. – rdupz

+0

와우는 좋은 일이지만, + 또한 무엇을 위해서입니까 (dstport = [0-9] + service = \ w +)? ... (...) ... \ w + ... 그리고 물음표 ... 때로는 dstport 전에 서비스가 하나 더 있습니다. 거기에 어떤 해결 방법이 있습니까? 감사합니다 ... –

+0

줄의 [dstport = xx]가 내가 보낸 파일의 첫 줄에 표시된 것과 같지 않으면 [dstip] 만 인쇄하고 [service = 핑]. 또한 출력을 파일로 보내면 새 행이 인쇄되지 않습니다. –

관련 문제