特定の行の中に特定の文字列がマッチするというパターンは普通にgrepをするという事で解決できますし、特定のフィールドに文字がふくまれるというのはそのマッチする文字列の部分だけで良いならawkで抽出してからというものができます。
しかし、特定のフィールドが特定の正規表現にマッチするときにその行全体を表示するというのはちょっと面倒です。awkで処理すれば簡単にできますが、しかし、毎回そのようなものを書くのは骨がおれます。
そこで、一つのシェルスクリプトにしてみました
#!/bin/sh if [ $# -gt 1 ];then while getopts n: OPT do case $OPT in "n" ) FLG_N="TRUE"; VALUE_N="$OPTARG"; esac done shift `expr $OPTIND - 1` if [ "$FLG_N" = "TRUE" ]; then awk \ '{ if($'$VALUE_N'~/'$1'/) print }' $2 else grep $1 $2 fi else echo "Usage: awgrep [-n field] PATTERN [FILE]" fi
こんな感じ
$cat sample.txt a write b moge c hoge d ahoge $./awgrep.sh 'oge' sample.txt b moge c hoge d ahoge $./awgrep.sh -n 2 '^.oge' sample.txt b moge c hoge $cat sample.txt | ./awgrep.sh -n 2 '^.oge' b moge c hoge
こんな感じですかね?ちょっと実装に不安はのこりますが..