Como verificar se uma letra maiúscula segue um padrão específico em uma linha?

0

Estou impondo hábitos de codificação para alguns alunos e, por isso, estou lendo seus arquivos de origem usando um script bash e preciso descobrir se eles têm o padrão 'class' no início da linha (o recuo pode ou não estar presente antes desse padrão na linha). Se o padrão for encontrado, o próximo caractere precisará ser marcado em maiúsculas. Por exemplo:

    class Camel
    class camel

Leia a primeira linha, ache o padrão class <space> e depois leia o caractere imediato após class <space> , foi maiúscula 'C', implica teste OK. Teste falha para a segunda linha. Basicamente, defina uma variável bash, digamos, test, como FALSE se o teste falhar, caso contrário, TRUE. Como faço isso usando awk , sed ou grep ?

    
por learnerX 07.12.2017 / 06:17

2 respostas

1

Isso é igualmente direto em qualquer uma das três ferramentas que você mencionou ( awk , sed ou grep ) ou usando qualquer outra ferramenta que tenha suporte para expressões regulares. Aqui está uma expressão regular que corresponde ao padrão que você deseja:

'^\s*class [A-Z]'

Ele corresponde a uma quantidade arbitrária de espaço em branco no início da linha, seguida pela string class , seguida por uma letra maiúscula. Você poderia aplicá-lo usando este comando (parcial) grep :

grep -Pq '^\s*class [A-Z]'

Para testar, você pode tentar algo como o seguinte:

user@host:~$ \
if echo '    class Camel' | grep -Pq '\s*class [A-Z]'; then \
    echo TRUE; \
else \
    echo FALSE; \
fi

TRUE

user@host:~$ \
if echo '    class camel' | grep -Pq '\s*class [A-Z]'; then \
    echo TRUE; \
else \
    echo FALSE; \
fi

FALSE

Se você quiser armazenar o resultado na variável TEST , poderá fazer algo como o seguinte:

if echo '    class camel' | grep -Pq '\s*class [A-Z]'; then \
    TEST=TRUE; \
else \
    TEST=FALSE; \
fi
    
por 07.12.2017 / 06:30
1

Para ler o conteúdo de um arquivo, você pode usar o comando cat para exibir o arquivo e, em seguida, desviar sua saída para outra entrada de comando. O abaixo é uma expressão regular simples que corresponde ao seu requisito básico.

cat hello | grep '^\s*class [A-Z]'

Descrição:

'cat hello'

Isso exibe o conteúdo do arquivo.

'|'

Isso é chamado de pipe. Que direciona a saída do primeiro comando para a próxima entrada de comando.

'grep'

O comando grep é usado para fazer correspondência de padrões.

'^\s*class [A-Z]'

A linha acima descreve seu requisito para corresponder à letra maiúscula após a classe de palavra. Isso é chamado de correspondência de padrões.

Esta é uma boa fonte para aprender expressões regulares Expressão regular

Obrigado.

    
por 07.12.2017 / 07:07

Tags