大文字が1行の特定のパターンに従うことを確認する方法は?

大文字が1行の特定のパターンに従うことを確認する方法は?

一部の学生はコーディングの習慣を強制しているので、bashスクリプトを使用してソースファイルを読み、行の先頭に "class"パターンがあることを確認する必要があります(インデントが発生したり発生しない場合があります)。 )行から)。パターンが見つかったら、次の文字が大文字であることを確認する必要があります。たとえば、

    class Camel
    class camel

最初の行を読み、パターンを見つけてclass <space>すぐに次の文字を読みますclass <space>。これは、テストが正常であることを示す大文字の「C」です。テストの2行目は失敗します。デフォルトでは、bash変数(例:test)は、テストが失敗した場合はFALSEに設定され、それ以外の場合はTRUEに設定されます。awksedまたはを使用してこれを行うにはどうすればよいですかgrep

ベストアンサー1

awkこれは、前述の3つのツール(、sedまたはgrep)のいずれかで正規表現をサポートする他のツールを使用するのと同じくらい簡単です。目的のパターンに一致する正規表現は次のとおりです。

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

行の先頭の空白の数に関係なく、文字列class、大文字の順に一致します。次の(部分)コマンドでそれを使用してgrep適用できます。

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

テストするには、次のように試すことができます。

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

結果を変数に保存するには、TEST次のようにします。

if echo '    class camel' | grep -Pq '\s*class [A-Z]'; then \
    TEST=TRUE; \
else \
    TEST=FALSE; \
fi

おすすめ記事