2016-12-22 24 views
0

私はファイルを持っており、データを抽出する必要があります。私が直面している問題は、他の行とほとんど同じではない行です。linuxでテキストファイルからデータを抽出する

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を取得したい、と2行目のDstPortのサービスと 先IP:ここでの例です。

私はLinuxで新しく、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

これはperlの正規表現です。 '+ 'は1つ以上を意味し、' [0-9。] 'に適用されます。 '? 'はnoneまたはoneを意味し、'(dstport = [0-9] + service = \ w +) 'に適用されます。 – rdupz

+0

うわー、それは良い仕事だけど、それは何のためでもあり(dstport = [0-9] + service = \ w +)?...(w ..)時にはサービスがdstportの前に来ることもあります。そのための回避策はありますか...ありがとうございます –

+0

私が送信したファイルの最初の行に示されているように[dstport = xx]行に[dstip]とignore [service = PING]をクリックします。出力をファイルに送るときにも、新しい行は出力されません。 –

関連する問題