Help us understand the problem. What is going on with this article?

zsh で編集子を使ってグロブ展開とかをその場で編集する

More than 5 years have passed since last update.

zsh には編集子(modifiers)というのがある。
こいつを使うと、グロブ展開(ワイルドカード展開)の結果をいろいろと編集できるようになる。

簡単な例

とりあえず例を見てもらったほうが早いと思う。

# 今このディレクトリにいる
% pwd
/home/mollifier/tmp

# ファイルが2つある
% echo *
fuga.txt  hoge.txt

# :a は編集子の一種で、フルパスに変換する
% echo *(:a)
/home/mollifier/tmp/fuga.txt /home/mollifier/tmp/hoge.txt

# :r も編集子の一種で、ファイルの拡張子の部分を取り除く
% echo *(:r)
fuga hoge

# 並べて書けば2つ以上使うこともできる
% echo *(:a:r)
/home/mollifier/tmp/fuga /home/mollifier/tmp/hoge

編集子(modifiers)とは

編集子(modifiers)とは、グロブ展開の結果などを編集するための記号のこと。グロブ展開以外にも変数展開、履歴展開でも同じ記号が使える。

変数展開で使う場合はこんな感じ。() で囲うのではなく、{} の内側に書く。

% pwd
/home/mollifier/tmp

# この変数の値を編集子で編集する
% var="list.txt"

# フルパスにする
% echo ${var:a}
/home/mollifier/tmp/list.txt

# 拡張子部分を取り除く
% echo ${var:r}
list

# 複数使う場合
% echo ${var:a:r}
/home/mollifier/tmp/list

履歴展開で使う場合はこんな感じ。履歴展開の場合はカッコで囲まずそのまま書く。

# まず履歴を貯める
% echo list.txt
list.txt

% echo !!:1:a
/home/mollifier/tmp/list.txt

% echo !!:1:a:r
/home/mollifier/tmp/list

編集子一覧

編集子として使える記号の一覧はは以下。

記号 意味
a フルパスにする
A aと同じ。ただしシンボリックリンクを実際のパスに置き換える
e 拡張子だけを残す(.とそれより左を削除する)
r 拡張子の部分を取り除く(root)
h ディレクトリ名の部分だけを残す(head。dirname するのと同じ)
t ファイル名の部分だけを残す(tail。basename するのと同じ)
l すべて小文字に置き換える
u すべて大文字に置き換える
s/old/new/ 最初の oldnew で置換する
gs/old/new/ すべての oldnew で置換する

詳細は man zshexpn の「HISTORY EXPANSION」->「Modifiers」 を参照。

うまく使うと今まで echo $var | sed s/old/new/ とかしてたところがスマートに書けると思うので使ってみてください!

mollifier
zsh, vim, vimperator, JavaScript, iOS, .NET に興味があるプログラマ
http://mollifier.hatenablog.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした