76224
改行のない１行の長いJSONファイルがあって特定のキーを検索したいです  
キーワードから前後数文字だけ grep または別のコマンドで取り出すことってできますか？
CC BY-SA 4.0
2021-05-31T01:31:35.197
76212
2021-05-31T07:29:52.020
question
bash grep
１行の長いファイルに対して grep をかけて前後数文字を表示したい
`grep` で「正規表現に一致したとこだけ」取り出すには `-o`
オプションが使えます。で、目的とする正規表現の前後に任意の文字に一致する正規表現を設ければだいたいやりたいことは達成できそうな気がします。

```

    $ grep -o '.{5}ABCD.{5}' example.json
    
```

`.` 任意の文字に一致  
`{5}` ５回の繰り返し（あわせて任意の５文字）  
`ABCD` 探したい正規表現

この案件だと実用上は `-b` オプションでバイトオフセットを表示させたほうが役に立つかもしれないです。

ファイルの先頭や末尾に一致があるとき、「任意の５文字」を追加すると一致しなくなるので `.{,5}` に変更して任意の５文字 **以下**
のほうがよいかもしれません（更にツールに食わせて機械的解釈する場合には要注意）

```

    $ grep -o '.{,5}S015.{,5}' example.mot.strippedcrlf
    S01500006
    $ grep -o '.{,5}S804FFE0100C.{,5}' example.mot.strippedcrlf
    FFF79S804FFE0100C
    $
    
```

「あなたが探したい正規表現」に対して、前者は「前５文字」後者は「後ろ５文字」を伴いませんので人間が読む分には問題なくてもツールに与えると誤動作する可能性が高いっス。そのような場合にどうすればよいかは案件次第なので、オイラからは提案だけ。
CC BY-SA 4.0
2021-05-31T07:29:52.020
76224
2021-05-31T07:29:52.020
8589
76212
answer