![zsh - 複雑なファイル名の一致[閉じる]](https://linux33.com/image/70231/zsh%20-%20%E8%A4%87%E9%9B%91%E3%81%AA%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%90%8D%E3%81%AE%E4%B8%80%E8%87%B4%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
ワイルドカード演算子を使用すると、ファイル名のリストをプログラムに渡すことはできません。
本質的に問題は、複数のレベルのサフィックスを持つファイルがあり、基本ファイルをより短いサフィックスと一致させたいことです。
たとえば、filename.suffix_somedata
一致する必要がありますが、filename.suffix_somedata_extrainfo
一致してはいけません。
試してみましたが、ls filename.suffix_[a-zA-Z0-9]*
期待ls filename.suffix_[:alnum:]*
どおりに機能しません。
答え1
*
の正規表現演算子に対応するのは(for)zsh -o extendedglob
です。このオプションでkshスタイルのワイルドカードを使用することもできます。したがって、次のいずれかを実行します。#
##
+
kshglob
setopt extendedglob # best in ~/.zshrc
ls -d filename.mainsuff_[[:alnum:]]#
または:
setopt kshglob
ls -d filename.mainsuff_*([[:alnum:]])(-)
(これは(-)
部分的に([[:alnum:]])
グローバル修飾子として処理されるのを防ぐためのものです(またはそうすることができますsetopt nobareglobqual
))。
答え2
これは:
ls | cut -d '_' -f1,2