
ファイル名にサブ文字列「s1r」、「s2r」、「s3r」、または「s19r」を含むファイルを ls したいです。
もうすぐ着きますよ!
失敗した試み:
ls *s[123][9?]r*
上記は、部分文字列を含むファイルのみを返します。
s19r
その間
ls *s[1-3]|[19]r*
戻り値
-bash: [19]r*: コマンドが見つかりません
ls: *s[1-3]: そのようなファイルまたはディレクトリはありません
つまり、 or | 演算子は認識されませんが、これはパイプにも使用されるため当然です。
「s1r」、「s2r」、「s3r」、または「s19r」を含むファイルを ls するにはどうすればよいですか?
答え1
使用ls *s1r* *s2r* *s3r* *s19r*
。
存在しないファイルを気にする場合は、nullglob オプションを設定できます。
nullglob
If set, bash allows patterns which match no files (see
Pathname Expansion above) to expand to a null string,
rather than themselves.
シェルが bash でない場合は、おそらく同様の方法があります。そのマニュアル ページを参照してください。
答え2
これを試してみるといいかもしれません:
ls *s?([123])r* *s19r*
例えば
次のファイルを含むディレクトリがあります:
% ls | column
s10r s12r s14r s16r s18r s1r s2r s4r s6r s8r
s11r s13r s15r s17r s19r s23r s3r s5r s7r s9r
上記の ls を使用します。
% ls *s?([123])r* *s19r*
s19r s1r s2r s3r
を参照してくださいパターンマッチングに関する bash マニュアル詳細については。