bash - curinga de [caracteres]

0

Existe uma maneira de usar [characters] , como [:upper:] , como se fossem um curinga? Por exemplo, digamos que eu tenha um diretório com os seguintes arquivos:

AAA
AA
aaa
aa
BBB
BB
bbb
bb

agora digamos que eu quero ls de todos os arquivos que começam com PELO MENOS duas letras minúsculas. Em vez de ls [[:lower]][[:lower:]]* existe uma maneira mais eficiente de fazer isso, que seria essencialmente "número de caractere curinga de [[:lower:]] e, em seguida, um caractere curinga?"

Além disso, não apenas começando com duas letras minúsculas, mas começando com APENAS 2 letras minúsculas, não * letras minúsculas. (por exemplo, ? em vez de * )? obrigado

    
por eeze 26.02.2018 / 01:22

1 resposta

4

Você pode usar globbing estendido :

If the extglob shell option is enabled using the shopt builtin, several extended pattern matching operators are recognized. In the following description, a pattern-list is a list of one or more patterns separated by a ‘|’. Composite patterns may be formed using one or more of the following sub-patterns:

?(pattern-list)
Matches zero or one occurrence of the given patterns.

*(pattern-list)
Matches zero or more occurrences of the given patterns.

+(pattern-list)
Matches one or more occurrences of the given patterns.

@(pattern-list)
Matches one of the given patterns.

!(pattern-list)
Matches anything except one of the given patterns.

Quanto ao que você perguntou, não consigo entender este:

... all the files that start with AT LEAST two lowercase letters ... "wildcard number of [[:lower:]]'s and then a wildcard?"

Um curinga corresponde a zero ou mais, o que não é o mesmo que dois ou mais. Qualquer número de [[:lower:]] s pode ser correspondido com o glob% estendido*([[:lower:]]). "Pelo menos dois" não precisa de globalização estendida: [[:lower:]][[:lower:]]* .

... starting with ONLY 2 lowercase letters, not * lowercase letters

[[:lower:]][[:lower:]]?([^[:lower:]]*)

Que são dois caracteres minúsculos, opcionalmente seguidos por (qualquer coisa que não seja um caractere minúsculo e qualquer coisa).

    
por muru 26.02.2018 / 02:50