@kyanny's blog

My thoughts, my life. Views/opinions are my own.

GNU grep: ASCII 以外の文字が含まれる行だけ検索する

テキスト(ファイル)から絵文字を含む行だけ検索したい、みたいなのを雑にやるには POSIX 文字クラス [:ascii:] が使える。

GNU grep が必要。macOS 標準の grep ではだめなので brew install coreutils したうえで ggrep を使うこと。

grep -aP '[^[:ascii:]]'

あるいは ripgrep を使う。

rg -aNP '[^[:ascii:]]'

文字クラスは [] の間に書く。[^x] で x 以外にマッチ、という記法。[:ascii:] POSIX 文字クラスは ASCII の範囲の文字にマッチする。これを組み合わせて [^[:ascii:]] で ASCII の範囲外の文字にマッチする正規表現になる。

実用例(あまり実用的ではないが)。

Commits · atom/atom · GitHub のコミットログメッセージから絵文字が含まれる行を検索する。

❯ git log --format='%B' | ggrep -aP '[^[:ascii:]]' | head -n 30
⬆️ electron-packager to 15.1.0 in /script
⬆️ electron-packager to 15.1.0 in /script
⬆️  Pr-changelog@0.3.4
⬆️   language-php@0.48.1
⬆️ marked to 4.0.10 in packages/deprecation-cop (#23484)
* ⬆️ deprecation-cop@4.0.10
* ⬆️ deprecation-cop 4.0.10
⬆️  Bump language-css@0.45.1
⬆️  Bump atom-select-list@0.8.1
⬆️  Bump minidump@0.22.0
⬆️  Bump archive-view@0.66.0
⬆️  Bump find-and-replace@0.219.8
⬆️  Bump whitespace@0.37.8
⬆️  Bump tree-view@0.228.3
⬆️ normalize-package-data@3.0.2
⬆️ git-utils@5.7.1
⬆️ chai@4.3.4
⬆️ focus-trap@6.3.0
* ⬆️ Bump minidump @aminya/minidump@0.19.0-8
📝  Update Contributing.md (#20707)
🍎 Don't quit upon 'window-all-closed' event on macOS (#21847)
⬆️ postcss@8.1.6
⬆️ find-and-replace@0.219.7
⬆️ electron-osx-sign@0.5.0
⬆️ tree-view@0.228.2
⬆️ sinon@9.2.1
⬆️ temp@0.9.2
⬆️ resolve@1.18.1
⬆️ chart.js@2.9.4
⬆️ postcss@8.1.2

古いコミットログには絵文字以外の ASCII 範囲外の文字も結構混ざっていてノイズが多い。