1 2 3 4 5 |
RHEL:~ $ grep -p 07 number grep: invalid option -- 'p' Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more information. RHEL:~ $ |
あれ!?grep -pって使えないの!??
仕事でIBM社のAIXを主に使っていましたが、Redhatを使用するようになりgrepコマンドのオプションが異なり戸惑ったことがあったので覚書。
そもそも grep コマンドって
UNIXおよびUNIX系OSで正規表現に一致する行を検索し出力するコマンド。
edコマンドの「global regular expression print」のg/re/pが由来のようです。
やりたかったこと
下のような空行で区切られてテキストファイルから指定した文字を含む段落を出力
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ cat number 01 02 03 04 05 06 07 08 09 10 $ |
例えば、07を検索すると06から10までの5行が表示されるイメージ。
では、IBM社のAIXではどうだろうか
IBM AIX
1 2 3 4 5 6 7 8 9 10 |
AIX:/ $ oslevel -s 7100-02-02-1316 AIX:/ $ grep -p 07 number 06 07 08 09 10 AIX:/ $ |
このように段落検索ができます。便利ですね〜
Red Hat Enterprise Linux
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
RHEL:~ $ grep -p 07 number grep: invalid option -- 'p' Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more information. RHEL:~ $ cat /etc/redhat-release ; grep -V Red Hat Enterprise Linux Server release 6.5 (Santiago) GNU grep 2.6.3 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. RHEL:~ $ |
GNU grep 2.6.3には-pオプションがなく、段落検索ができないみたいです。
段落検索って意外と使用頻度が高いのかな思います。ログ解析とかにも便利です。
代替方法としては以下のようにawkコマンドを使用する方法しか無いんですかね?
コマンド:awk ‘{FS=”\n” ; RS=””} /検索キーワード/ {print}’ ファイル
1 2 3 4 5 6 7 |
RHEL:~ $ awk '{FS="\n" ; RS=""} /07/ {print}' number 06 07 08 09 10 RHEL:~ $ |
こうすると何とか出来ました。
Red Hatのソースコードから派生しているCent OSもやはり段落検索ができなく、また、BSD UNIXベースにApple社が開発したMac OSも同様にできませんでした。(検索はできましたが。)
意外にもAIXのgrepコマンドがマイナー派なんですね。でそれ慣れてた自分がいけないのか。。。
参考までに
Cent OS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
CentOS:~ $ grep -p 07 number grep: invalid option -- 'p' Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more information. CentOS:~ $ awk '{FS="\n" ; RS=""} /07/ {print}' number 06 07 08 09 10 CentOS:~ $ cat /etc/redhat-release ; grep -V CentOS release 6.4 (Final) GNU grep 2.6.3 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. CentOS:~ $ |
Mac OS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
MacOS:~ $ grep -p 07 number 07 MacOS:~ $ awk '{FS="\n" ; RS=""} /07/ {print}' number 06 07 08 09 10 MacOS:~ $ sw_vers ; grep -V ProductName: Mac OS X ProductVersion: 10.9.3 BuildVersion: 13D65 grep (BSD grep) 2.5.1-FreeBSD MacOS:~ $ |