echo を使用して、少なくとも 2 文字で始まるが「an」で始まらないディレクトリ (コンテンツではない) を表示したい
たとえば、ディレクトリに次のものがあったとします。
a as an23 an23 blue
私はただ
as blue
戻ってくるだろう
試してみecho ^an*
ましたが、ディレクトリも1文字で返されます。
次の形式でこれを行う方法はありますかecho globalpattern
echo を使用して、少なくとも 2 文字で始まるが「an」で始まらないディレクトリ (コンテンツではない) を表示したい
たとえば、ディレクトリに次のものがあったとします。
a as an23 an23 blue
私はただ
as blue
戻ってくるだろう
試してみecho ^an*
ましたが、ディレクトリも1文字で返されます。
次の形式でこれを行う方法はありますかecho globalpattern
名前には少なくとも2つの文字が必要なので、printf '%s\n' ??*
このような名前を別々の行にエコーするために使用できます。次に、で始まる名前を削除して、次のようにすることができan
ますgrep -v '^an'
。
printf '%s\n' ??* | grep -v '^an'
grep
最新のシェルを使用するコマンドでは、引用符は厳密には必要ありません。四半世紀ほど前に、ボーンシェルは^
その同義語として使用されていた|
ので、私は今でもキャレットの周りに引用符を使用しています。
echo
の代わりにどうしても使用する必要がある場合はprintf
、空白を改行にマップする必要があります(空白を含む名前がない場合)。
私はechoコマンドだけで試していますが、grepもありませんか?
どうですか:
echo [!a]?* a[!n]*
最初の用語は、a
;で始まらない2つ以上の文字名をすべてリストします。2番目のリストには、2つ以上の文字名がすべてリストされています。最初の名前はa
で、2番目の名前はそうではありませんn
。
これでうまくいくはずですが、 ls または find を使用したほうがよいでしょう:
echo * | tr ' ' '\012' | egrep '..' | egrep -v '^an'
シェルのグロビングは正規表現の一種ですが、egrep 正規表現ほど強力ではありません。