2

/etc/samba/smb.conf からすべての非コメント行と非空行を取得する正規表現を作成しようとしています。コメントは、次の行です。

  1. 皮切りに #
  2. 皮切りに ;
  3. 任意の量の空白で始まり、直後に # または ; が続きます。

以下を試してみましたが、コメントタイプ3を適切に処理できませんでした。

grep -P '^\s*[^#;]' /etc/samba/smb.conf

これは、3種類のコメントすべてで機能しました。

grep -P '^\s*[^#;\s]' /etc/samba/smb.conf

\s を文字クラスに追加すると、コメント タイプ 3 が正常に除外された理由を説明できますか?

4

2 に答える 2

1

ここでの問題は、 end anchor を使用していないため、部分一致$です。

例3の場合

      ;

;によって行われるまでの部分一致があります\s*。無効にした他の正規表現\sでは、スペースがキャプチャされず、部分一致が無効になります。

ここでの正しい正規表現は

 (?m)^(?!\s*[#;]).+$

デモを見る

于 2015-05-13T18:53:46.470 に答える