2016-05-15 9 views
0

私は1つの文に結合しようとしていた2つの正規表現の値を持っていますが、正しく動作しません。コメントがある行を表示したり、空白で開始してからコメントを付けたりできるようにする必要があります。これらの2つの正規表現パターンを結合します。

ie。

/* comment 

     /* comment 

sed -n "/\(^[/*]\).*\([*/]$\)/ p" testfile 

sed -n "/^\s/ p" testfile 

私は、ただし、動作していません。

これらを1つにマージするか、別々に実行する必要がありますか。スペースで開始することができます

/^[ ]*(\/\*.*)$/ 

を上記の正規表現は、コメントを持つ任意の行にマッチします、:

おかげ

+0

Cプログラムなどでコメントを見つけようとしていますか?簡潔でテスト可能なサンプル入力と期待される出力を含めるようにあなたの質問を編集してください。文字列に表示される '/ *'のように、正しいものにするのは難しい場合も含めます。 –

答えて

1

これは両方のケースに

/^\s*\/\*.*/ 
+1

または '/^\ s * \/\ * /'、最後の '。*'は常にとにかく一致します。 –

+0

はい、交換のために使用された場合は、残りの部分もキャプチャする必要があります。 – karakfa

+0

絶対に - 私のコメントは住所の使用にのみ適用されます。 –

1

をカバーしなければならないあなたが試すことができます、グループにラインをキャプチャします。 Regex Demo


正規表現の説明

/^[ ]*(\/\*.*)$/ 

    ^assert position at start of a line 
    [ ]* match a single character present in the list below 
     Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy] 
     the literal character 
    1st Capturing group (\/\*.*) 
     \/ matches the character/literally 
     \* matches the character * literally 
     .* matches any character (except newline) 
      Quantifier: * Between zero and unlimited times, as many times as possible, giving back as needed [greedy] 
    $ assert position at end of a line 
1

を確認してください他の回答が示すように、あなたのオリジナルの表現がマッチしたすべてを一致させるのに十分な一般的な正規表現を見つけることがしばしば可能です。あなたは常にこのよう2つの式を組み合わせることができますので、実際には、これは、常に可能である:(あなたが使う方言によっては、バックスラッシュを使用する必要があります)

(regex_1|regex_2|...|regex_n) 

しかし、sedプログラムは、いくつかから構成することができます文、あなたの例は、単にのように書き換えることができるよう:あなたはグレップを使用することができます

sed -n "/\(^[/*]\).*\([*/]$\)/p /^\s/p" testfile 
1

:ラインの

grep "^ */\*" testfile 

^=スタート まず* I 0回以上空白を繰り返す 2番目の星がエスケープされているので、それは本当のものです。