このコマンドでは:
$ echo "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" |
> sed 's/[a-z]//g'
ABCDEFGHIJKLMNOPQRSTUVWXYZ
そうだね?
ただし、有効なロケールはですen_US.utf8
。これ対応するロケールの組み合わせ順序はい(bashを使用):
$ printf '%b' "$(printf '\\U%x\\0' {65..90} {97..122})" | sort -z; echo
aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
またはsort
-z が使用できない場合:
$ printf '%s' $(printf '%s\n' {a..z} {A..Z} | sort); echo
aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
これが正しい場合、範囲は上記[b-y]
以外のすべての文字と一致する必要がありますaAYzZ
。
しかしそれは真実ではない。
Grepは同じことをします[a-z]
。すべての小文字(アクセントを含む)と一致します。
$ printf '%s' $(printf '%s' {a..z} {A..Z} éáíèüÉÁÍÈÜ | grep -o '[a-z]'); echo
abcdefghijklmnopqrstuvwxyzéáíèü
これを使用して[a-Z]
すべての文字を一致させます(その範囲は効果がありません)。
$ printf '%s' $(printf '%s' {a..z} {A..Z} éáíèüÉÁÍÈÜ | grep -o '[a-Z]'); echo
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZéáíèüÉÁÍÈÜ
答え1
あなたの質問から一連の文字をgrepまたはsedしたいと思います。
使用sed:
$ printf '%s' $(printf '%s\n' {a..z} {A..Z} | sort) | sed 's/b[^|]*y//g'
aAYzZ
使用グレブ:
$ printf '%s' $(printf '%s' {a..z} {A..Z} éáíèüÉÁÍÈÜ | grep -o "a[^|]*z"); echo
abcdefghijklmnopqrstuvwxyz