シフト文字の正規表現パターンの検索

シフト文字の正規表現パターンの検索

ls交互にgrep大文字と小文字を出力にパイプするにはどうすればよいですか?


たとえば、

ファイル (1) aAbBaBbA, (2) bAbBaA, (3) bbAb, (4) AAaBbAa, (5) BBBaaa, (6) aBaB.

1,2,6を探したいです。


どのコマンドを入力する必要がありますか?

(編集する):私の例は十分に具体的ではありません。下から上に交互に含めたいです。 (6)から始めなければならないババ到着ババしかし、オリジナルを維持したいと思います。

ベストアンサー1

努力する

ls -1 | grep -E '^[A-Z]?([a-z][A-Z])*[a-z]?$'

編集:@mikeservが正しく指摘したように、これはASCII以外の文字では機能しません。実際、このような状況は非常に頻繁に発生します(たとえば、ファイル名に外国のタイトルが含まれている音楽ファイル)。したがって、より強力なアプローチは次のとおりです。

ls -1 | grep -E '^[[:upper:]]?([[:lower:]][[:upper:]])*[[:lower:]]?$'

以下では読みやすさのためにそのままにしておきます[A-Z]

注:これは単一文字(大文字または小文字)と一致します。 「代替大文字と小文字」は、連続した同様の大文字と小文字がないゼロ個以上の文字シーケンスとして定義されると言えます... :-)

テスト:

mkdir -p /tmp/junk
cd /tmp/junk
touch aAbBaBbA bAbBaA bbAb AAaBbAa BBBaaa aBaB

ls -1 | grep -E '^[A-Z]?([a-z][A-Z])*[a-z]?$'
# aAbBaBbA
# aBaB
# bAbBaA

しかし、これだけでは十分ではありません。追加テスト:

touch aB
touch aBcD
touch aBcDeF
touch aBcDEf
touch Ab
touch AbCd
touch AbCdEf
touch AbCdeF
touch AbCdEF
ls -1 | grep -E '^[A-Z]?([a-z][A-Z])*[a-z]?$'
# aAbBaBbA
# aB
# Ab
# aBaB
# aBcD
# AbCd
# aBcDeF
# AbCdEf
# bAbBaA

おすすめ記事