質問: 改行のない1行の長いJSONファイルがあって特定のキーを検索したいです キーワードから前後数文字だけ grep または別のコマンドで取り出すことってできますか?
回答: `grep` で「正規表現に一致したとこだけ」取り出すには `-o` オプションが使えます。で、目的とする正規表現の前後に任意の文字に一致する正規表現を設ければだいたいやりたいことは達成できそうな気がします。 ``` $ grep -o '.{5}ABCD.{5}' example.json ``` `.` 任意の文字に一致 `{5}` 5回の繰り返し(あわせて任意の5文字) `ABCD` 探したい正規表現 この案件だと実用上は `-b` オプションでバイトオフセットを表示させたほうが役に立つかもしれないです。 ファイルの先頭や末尾に一致があるとき、「任意の5文字」を追加すると一致しなくなるので `.{,5}` に変更して任意の5文字**以下**のほうがよいかもしれません(更にツールに食わせて機械的解釈する場合には要注意) ``` $ grep -o '.{,5}S015.{,5}' example.mot.strippedcrlf S01500006 $ grep -o '.{,5}S804FFE0100C.{,5}' example.mot.strippedcrlf FFF79S804FFE0100C $ ``` 「あなたが探したい正規表現」に対して、前者は「前5文字」後者は「後ろ5文字」を伴いませんので人間が読む分には問題なくてもツールに与えると誤動作する可能性が高いっス。そのような場合にどうすればよいかは案件次第なので、オイラからは提案だけ。