🤔

なんやかんやの検索に役立つ基本コマンド・テクニック

2024/12/25に公開

おはようございます、こんにちは、こんばんは。
スペースマーケットでWebエンジニアをしています、s0arです。

グラコロうまい

日頃の開発で覚えておくとはかどるコマンドやテクニックを書いていきます。
(随時更新予定です)

globパターン

正直これだけのためにこの記事を書いてるところはある。
でもこれだけだと3秒で読み終わる記事になるのでね。

ワイルドカードを組み合わせてパスのパターンを指定できます。
https://docs.oracle.com/ja-jp/iaas/Content/devops/using/glob-patterns.htm

git grepやVisual Studio Codeの検索で使うのが便利です。
詳しくはgit grepの項で書きます。

grep

だいぶ基本です。でもめっちゃ便利。
ぶっちゃけこれでこの記事終わっていいぐらいめっちゃ使う。
パイプでコマンドの結果に対してgrepをよく使います。
以下個人的によく使う使い方。

grep単体

自分は大体以下のオプションを指定して使います。

  • r(サブディレクトリ内のファイルも含める)
  • n(行番号を表示する)
grep -rn grep articles
articles/64e66a8a5a9a45.md:26:git grepやVisual Studio Codeの検索で使うのが便利です。
articles/64e66a8a5a9a45.md:27:詳しくはgit grepの項で書きます。
articles/64e66a8a5a9a45.md:29:## grep
articles/64e66a8a5a9a45.md:33:パイプでコマンドの結果に対してgrepをよく使います。
articles/64e66a8a5a9a45.md:36:### grep単体

find

grep単体でも使えますが、findとの組み合わせが便利です。
以下は拡張子が.mdのファイルからfindを含む行を検索しています。

find . -name "*.md" | xargs grep -n find
./articles/64e66a8a5a9a45.md:52:### find
./articles/64e66a8a5a9a45.md:54:grep単体でも使えますが、findとの組み合わせが便利です。

history

コマンド実行履歴を検索。
自分はコマンド覚えるの苦手なので重宝します。

history | grep git
 1083  git add .
 1084  git commit --amend
 1085  git push --force-with-lease origin feature/20241223
 1087  git status
 1088  git fetch
 1089  git reset --hard origin/main
 1090  git switch -c 20241224-1

ps

プロセスの検索。
プロセス止めたり、プロセスが動いてるか確認するときに使います。

ps aux | grep postman
s0ar        54602   0.0  0.0 410802608   2912   ??  S<   201124    0:00.09 /Applications/Postman.app/Contents/Frameworks/Squirrel.framework/Resources/ShipIt com.postmanlabs.mac.ShipIt /Users/s0ar/Library/Caches/com.postmanlabs.mac.ShipIt/ShipItState.plist
s0ar          536   0.0  0.0 410199728   1152 s001  R+    8:55AM   0:00.00 grep postman

git grep

git管理されているファイルを検索できます。
git grepは前述のglobパターンとの組み合わせで強くなります。

オプションなし

git grep "zenn"
README.md:* [📘 How to use](https://zenn.dev/zenn/articles/zenn-cli-guide)
articles/1f224ed381eece.md:![](https://storage.googleapis.com/zenn-user-upload/44951e6c5bf1-20221028.png =250x)
articles/4a6ceabcc5109c.md:https://zenn.dev/s0ar/scraps/52f5fc8e523f93
articles/4a6ceabcc5109c.md:https://zenn.dev/link/comments/d40a61bdfb3e1c
package-lock.json:  "name": "zenn-articles",
package-lock.json:      "name": "zenn-articles",
package-lock.json:        "zenn-cli": "^0.1.158"
package-lock.json:    "node_modules/zenn-cli": {
package-lock.json:      "resolved": "https://registry.npmjs.org/zenn-cli/-/zenn-cli-0.1.158.tgz",
package-lock.json:        "zenn": "dist/server/zenn.js"
package.json:  "name": "zenn-articles",
package.json:    "url": "git+https://github.com/s-0-a-r/zenn-articles.git"
package.json:    "url": "https://github.com/s-0-a-r/zenn-articles/issues"
package.json:  "homepage": "https://github.com/s-0-a-r/zenn-articles#readme",
package.json:    "zenn-cli": "^0.1.158"

-iオプション付き

大文字・小文字を区別せず検索します。

git grep -i "zenn"
README.md:# Zenn CLI # これが検索に引っかかるようになる
README.md:* [📘 How to use](https://zenn.dev/zenn/articles/zenn-cli-guide)
articles/1f224ed381eece.md:![](https://storage.googleapis.com/zenn-user-upload/44951e6c5bf1-20221028.png =250x)
articles/4a6ceabcc5109c.md:https://zenn.dev/s0ar/scraps/52f5fc8e523f93
articles/4a6ceabcc5109c.md:https://zenn.dev/link/comments/d40a61bdfb3e1c
package-lock.json:  "name": "zenn-articles",
package-lock.json:      "name": "zenn-articles",
package-lock.json:        "zenn-cli": "^0.1.158"
package-lock.json:    "node_modules/zenn-cli": {
package-lock.json:      "resolved": "https://registry.npmjs.org/zenn-cli/-/zenn-cli-0.1.158.tgz",
package-lock.json:        "zenn": "dist/server/zenn.js"
package.json:  "name": "zenn-articles",
package.json:    "url": "git+https://github.com/s-0-a-r/zenn-articles.git"
package.json:    "url": "https://github.com/s-0-a-r/zenn-articles/issues"
package.json:  "homepage": "https://github.com/s-0-a-r/zenn-articles#readme",
package.json:    "zenn-cli": "^0.1.158"

.mdファイルのみ

--のあとにglobパターンを指定すると対象ファイルを指定できます。

git grep -i zenn -- **/*.md
README.md:# Zenn CLI
README.md:* [📘 How to use](https://zenn.dev/zenn/articles/zenn-cli-guide)
articles/1f224ed381eece.md:![](https://storage.googleapis.com/zenn-user-upload/44951e6c5bf1-20221028.png =250x)
articles/4a6ceabcc5109c.md:https://zenn.dev/s0ar/scraps/52f5fc8e523f93
articles/4a6ceabcc5109c.md:https://zenn.dev/link/comments/d40a61bdfb3e1c

.mdファイルを除く

否定(!)で除外できます。

git grep -i zenn -- ':!*.md'
package-lock.json:  "name": "zenn-articles",
package-lock.json:      "name": "zenn-articles",
package-lock.json:        "zenn-cli": "^0.1.158"
package-lock.json:    "node_modules/zenn-cli": {
package-lock.json:      "resolved": "https://registry.npmjs.org/zenn-cli/-/zenn-cli-0.1.158.tgz",
package-lock.json:        "zenn": "dist/server/zenn.js"
package.json:  "name": "zenn-articles",
package.json:    "url": "git+https://github.com/s-0-a-r/zenn-articles.git"
package.json:    "url": "https://github.com/s-0-a-r/zenn-articles/issues"
package.json:  "homepage": "https://github.com/s-0-a-r/zenn-articles#readme",
package.json:    "zenn-cli": "^0.1.158"

対象ファイルの拡張子を複数指定する

git grep -i zenn -- **/*.{md,json}
README.md:# Zenn CLI
README.md:* [📘 How to use](https://zenn.dev/zenn/articles/zenn-cli-guide)
articles/1f224ed381eece.md:![](https://storage.googleapis.com/zenn-user-upload/44951e6c5bf1-20221028.png =250x)
articles/4a6ceabcc5109c.md:https://zenn.dev/s0ar/scraps/52f5fc8e523f93
articles/4a6ceabcc5109c.md:https://zenn.dev/link/comments/d40a61bdfb3e1c
package-lock.json:  "name": "zenn-articles",
package-lock.json:      "name": "zenn-articles",
package-lock.json:        "zenn-cli": "^0.1.158"
package-lock.json:    "node_modules/zenn-cli": {
package-lock.json:      "resolved": "https://registry.npmjs.org/zenn-cli/-/zenn-cli-0.1.158.tgz",
package-lock.json:        "zenn": "dist/server/zenn.js"
package.json:  "name": "zenn-articles",
package.json:    "url": "git+https://github.com/s-0-a-r/zenn-articles.git"
package.json:    "url": "https://github.com/s-0-a-r/zenn-articles/issues"
package.json:  "homepage": "https://github.com/s-0-a-r/zenn-articles#readme",
package.json:    "zenn-cli": "^0.1.158"

まとめ

今回は諸々の検索に使えるコマンド・テクニックを簡単に紹介しました。
まずは本当に基礎的なものだけを挙げてみました。
思いついたら随時更新します。

GitHubで編集を提案
スペースマーケット Engineer Blog

Discussion