grepは指定したテキストから文字列を探すコマンドです。
文字列の存在する行だけでなく、オプションを指定することで、発見行の前後の行も表示することができます。
今回は、確認用のテキストとして/usr/share/dict/wordsを使いますが、/usr/share/dict/wordsが存在しない場合は、以下のようにインストールできます。
takk~$ sudo apt install wamerican-large パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 以下のパッケージが自動でインストールされましたが、もう必要とされていません: adwaita-icon-theme at-spi2-core ca-certificates-java dconf-gsettings-backend (省略) 以前に未選択のパッケージ wamerican-large を選択しています。 (データベースを読み込んでいます ... 現在 65091 個のファイルとディレクトリがインストールされています。) .../wamerican-large_2018.04.16-1_all.deb を展開する準備をしています ... wamerican-large (2018.04.16-1) を展開しています... wamerican-large (2018.04.16-1) を設定しています ... man-db (2.8.5-2) のトリガを処理しています ... dictionaries-common (1.28.1) のトリガを処理しています ... takk~$
では、本題のgrepです。
まずは、発見したい文字列のみを、行番号付きで表示してみます。
takk~$ grep -n ^tomato$ /usr/share/dict/words 94473:tomato takk~$
94473行目にtomatoが見つかりました。
次は、tomatoがある行の、前5行表示してみます。
takk~$ grep -nB5 ^tomato$ /usr/share/dict/words 94468-tomahawk 94469-tomahawk's 94470-tomahawked 94471-tomahawking 94472-tomahawks 94473:tomato takk~$
tomahawk〜という文字列が見つかりました。
B5オプションの、「B」はBefore、「5」は5行という意味です。
行番号の後にある:や-は、
:が目的の文字列。
-はBオプションで表示された行を表します。
最後に、tomatoの前後1行を表示してみます。
takk~$ grep -nC1 ^tomato$ /usr/share/dict/words 94472-tomahawks 94473:tomato 94474-tomato's takk~$
「C」はCenterですね。
man grepには、このように書かれています。
前後の文脈行の制御 -A NUM, --after-context=NUM NUM で指定した行数だけ、パターンにマッチした行の後に続く文脈も表 示します。 マッチした行を含むグループ同士の間には、グループを区 切る印 (--) からなる行を置きます。 -o や --only-matching と同時 に使うと、このオプションは効果がなく、警告メッセージを出します。 -B NUM, --before-context=NUM NUM で指定した行数だけ、パターンにマッチした行に先行する文脈も表 示します。 マッチした行を含むグループ同士の間には、グループを区 切る印 (--) からなる行を置きます。 -o や --only-matching と同時 に使うと、このオプションは効果がなく、警告メッセージを出します。 -C NUM, -NUM, --context=NUM NUM で指定した行数だけ、パターンにマッチした行の前後の文脈も表示 します。 マッチした行を含むグループ同士の間には、グループを区切 る印 (--) からなる行を置きます。 -o や --only-matching と同時に 使うと、このオプションは効果がなく、警告メッセージを出します。
コメント