自分用の覚え書きも兼ねて…
- 実行環境:Mac, Terminal, Zsh
PATHの中身を見て色々チェックしたい欲求
今までに色々と導入してきていると、PATHがぐちゃぐちゃで数百文字を超えることもあります。
あれ設定していたっけ?と探すとき、echoしてgrepにパイプして…とやってもヒットすると結局1行なので、PATHの全てが表示されてしまいます。
そういうときは、:
で分割して改行した後にgrepして抽出したいですよね。
ワンライナーでやりたいな…
ということで、まずは:
を\n
に置き換えるワンライナー。
2024/2/20 追記:もっと短い例をコメントで教えていただきました!
それがこちら↓
tr : '\n' <<<$PATH
result.txt
/Users/username/.gem/ruby/3.2.2/bin
/Users/username/.rubies/ruby-3.2.2/lib/ruby/gems/3.2.0/bin
/Users/username/.rubies/ruby-3.2.2/bin
/Users/username/.docker/bin
/Users/username/Library/Python/3.9/bin
/Users/username/addon/chrome_driver
/opt/homebrew/opt/openjdk/bin
/opt/homebrew/bin
/opt/homebrew/sbin
/usr/local/bin
~ 以下略 ~
各実行ファイルのパスが改行付きになり、見やすくなりました。
他にも複数の例を挙げていただきました。こんなに多様なやり方があるんですね…!
echo "$PATH" | awk -v RS=: 1 awk -v RS=: 1 <<<$PATH echo "${PATH//:/$'\n'}" printf '%s\n' $path # zsh専用
追記前のコマンドを開く。
semicolon_to_newline.sh
echo $PATH | awk -v 'RS=:' -v 'ORS=\n' '{print$0}'
awk
のオプションのRecord Separatorを:
、Output Record Separatorを\n
に設定すると置換できるので、あとはprint
で全部表示しています。
改行抽出ワンライナー
先程引用した例にgrepをパイプするだけ!
tr : '\n' <<<$PATH | grep local
result.txt
/usr/local/bin
/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin
/usr/local/texlive/2023basic/bin/universal-darwin
この例だと、local
が含まれているPATHを抽出しています。自由に置き換えてください。
これで万事解決しましたね!
追記前のコマンドを開く。
そして、grepでの抽出まで含めたのが次のワンライナー。
extract.sh
echo $PATH | awk -v 'RS=:' -v 'ORS=\n' '{print$0}' | grep local