次の行を含むファイルがあります。
SOME COMMAND 34 XXXXX ;
; a comment which may contain a :
sometext001 : X00 : 1 ;
: X01 : 1 ;
: X11 : 1 ;
sometext001
そしてgrep/egrepで取得したい。
正規表現の使用^\s*[^:\s;]+\s*:
(つまり: 空白を含む行の先頭から始まり、空白、コロン、セミコロン以外の少なくとも 1 つの文字が続き、その後に空白がいくつかまたはまったくない行が続き、その後にコロンが続きます)
複数行のサポートを有効にすると、オンラインの正規表現テスターhttp://regexr.com?35eamを使用して、テキスト (次を含む:) を一致させることができます。
とにかく、grep/egrep は行ごとに機能するという印象を受けました。では、この例を含むファイルで egrep を使用すると正規表現が機能しないのはなぜですか?
egrep を使用して目的の結果を達成する別の方法はありますか、それが不可能な場合は、シェル スクリプトから呼び出し可能な別のワンライナーを使用しますか?
更新: regex の提案された変更は^[[:space:]]*[^[:space:];]+[[:space:]]*:
指定された行に一致しますが、egrep に -o オプションを使用したときに明らかなように、その行で 1 回sometext001 :
と 1回、2 回一致します。X00 :
これを解決するには?
更新:テスト ファイルには、上記のテキストが正確に含まれていました。コマンドラインはegrep -o '^([[:space:]]*[^:[:space:];]+[[:space:]]*:)' test.txt
(()ペアなしでも試行されました)。出力は
sometext001 :
X00 :