SSブログ

grep で正規表現にマッチした部分だけ抽出するには? [NT]

grep で正規表現にマッチした部分だけを抽出(抜き出す)には、-o オプションを用いる。

ただし、-o オプションは比較的新しい grep でないと使用できない。 GNU utilities for Win32 で紹介したパッケージに含まれる grep のバージョンは、

> grep -V
GNU grep version 2.0 + multi-byte extension 1.04

であり、このバージョンでは使えない。そこで、Grep for Windows からダウンロードできるバージョンを使うと良い。こちらは 2.5.4 である。

>grep -V
GNU grep 2.5.4

Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ダウンロード出来るファイルは幾つかあるが、めんどくさい方は Setup を使う。zip が欲しい方は Binaries と Dependencies の Zip をダウンロードして、 Dependencies に含まれる dll を Binaries の grep と同じディレクトリに入れればよい。

-o オプションは例えば、

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    127.0.0.1:4111         127.0.0.1:4112         ESTABLISHED
  TCP    127.0.0.1:4112         127.0.0.1:4111         ESTABLISHED
  TCP    127.0.0.1:4114         127.0.0.1:4115         ESTABLISHED
  TCP    127.0.0.1:4115         127.0.0.1:4114         ESTABLISHED
  TCP    127.0.0.1:5152         0.0.0.0:0              LISTENING
  TCP    127.0.0.1:5152         127.0.0.1:4113         CLOSE_WAIT
  TCP    127.0.0.1:9089         0.0.0.0:0              LISTENING
  TCP    127.0.0.1:10110        0.0.0.0:0              LISTENING

という内容の ip.txt のデータがあるとして、これから IP アドレスとポートの部分を抜き出すには、

grep -o -e [0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+:[0-9]\+ ip.txt

とすると、

127.0.0.1:4111
127.0.0.1:4112
127.0.0.1:4112
127.0.0.1:4111
127.0.0.1:4114
127.0.0.1:4115
127.0.0.1:4115
127.0.0.1:4114
127.0.0.1:5152
0.0.0.0:0
127.0.0.1:5152
127.0.0.1:4113
127.0.0.1:9089
0.0.0.0:0
127.0.0.1:10110
0.0.0.0:0

を得られる。

参考文献


タグ:grep 正規表現

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。