grep の正規表現で「後読み」「先読み」を使うには
このようにするとマッチした文字をガッツリ取り出せる。
grep -Po '(?<=cond)\w+' grep -Po '\w+(?=cond)'
役割 | 書式 | サンプル |
---|---|---|
condが接頭 | (?<=cond) | (?<=Debian Gnu)\w+ |
接辞がcond | (?=cond) | \w+(?<=Linux) |
( -P
は必須です)
(?<=xxx)aaa
には別書式 がある
\K
でもできる。
echo abcdefg | grep -oP 'abcd\Kefg'
サンプル/実際に活用した例。
takuya@orangepizero:~$ uname -a Linux orangepizero 3.4.113-sun8i #18 SMP PREEMPT Thu Jun 15 02:16:06 CEST 2017 armv7l GNU/Linux takuya@orangepizero:~$ uname -a | \grep -P -o '(?<=Linux\s)\w+' orangepizero takuya@orangepizero:~$
grep マッチのポイント( POSIX互換必須)
grep は 殆どの場合、alias されている。なので -E などとかぶらないようにする
そのために aliasを一時的にオフにするなどと組合せて戦うと便利。
\grep -P regex
マッチしないものを取り出す。
否定は余り使うことがないのだけれど。マッチしないものを取り出す場合もできる。
grep -Po '(?<!except)\w+' grep -Po '\w+(?!except)'
2023-09-26
- 否定を追加
- PCRE に言及
- サンプル追加
2024-05-16
- \K を追加