0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PATHを:から改行にして表示→grepで該当行を抽出するワンライナー

Last updated at Posted at 2024-02-08

自分用の覚え書きも兼ねて…

  • 実行環境: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
0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?