0

次のようなデータを含むテキスト ファイルがあります。

8 月 21 日 [10.23.5.5] ティアダウン ダイナミック

8 月 18 日 [10.150.1.45] 8 月 21 日 15:28:34 otoldc

8 月 24 日 [10.96.5.10] 2012 年 8 月 21 日 18:58:26 HYD

8 月 24 日 [10.96.5.10] 2012 年 8 月 22 日 18:58:26 HYD

8 月 21 日 [192.168.15.231] sendmail[18831]

「[」と「]」で囲まれた IP アドレス以外はすべて削除する必要があります。「[」までの文字列長は固定です。"]" の後の文字列の長さが異なります。ここで既存のソリューションの 1 つを使用しようとしましたが、成功しませんでした。バッチを使用してそれを行うことは可能ですか?ありがとう:-)

4

3 に答える 3

2

コマンドラインから直接: for /f "tokens=2 delims=[]" %F in (file.txt) do echo %F. 必要に応じてリダイレクトします。sed/awk & regexes ほど柔軟ではありませんが、外部ツールは必要ありません。

ただし、より複雑なものをまとめる予定がある場合は、より強力なツールに本当に目を向けます-既に述べたawkまたはPerlを除いて、Winでの自然な選択はPowershellです.

于 2012-08-26T10:30:35.873 に答える
1

のバージョンがまだシステムにインストールsedされていない場合は、インストールします。

$ sed -r -e 's/^[^[]*\[([^]\]*)].*/\1/' file.txt
10.23.5.5
10.150.1.45
10.96.5.10
10.96.5.10
192.168.15.231

この sed ワンライナー「スクリプト」は、行の最初 の [] 角​​括弧のセット内の内容を除くすべてを行から削除した後、各入力行を出力します。これらの内容をチェックして、IP アドレスと一致することを確認しません。

于 2012-08-26T02:22:35.087 に答える
0

これをバッチとしてタグ付けしたので、これはLinuxではなくWindows上にあると思います。それでも、 CygwinのWebサイトにアクセスして、コピーをダウンロードすることを強くお勧めします。catこれにより、およびコマンドにアクセスできるようになりgrep、これがはるかに簡単になります。Cygwinをインストールしたら、次のコマンドを実行して、ログファイルからIPアドレスを解析できます。

cat your.log | grep -oE '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' > ips.txt

乾杯

于 2012-08-26T02:08:51.137 に答える