2016-10-26 4 views
-2

これらの行は、すべての行が1つの単語から始まり、いくつかの文が始まるので、すべてのセクションを選択するのが好きです。たとえば:linuxコマンドで正規表現のセクションを選択する方法

 delete = \account 
      user\ 
      admin 
      admin right is good. 
     add = \ 
      nothing 
      no out 
      input output is not good 
     edit = permission 
      bob 
      admin 
      alice killed bob!!! 

私は、例えばセクションを選択します:

add = \ 
     nothing 
     no out 
     input output is not good 

私は正規表現でそれを行うが好き。 ...最後のセクションは、\ nをして終了した要件の対象

/\s*(\w+) = ([^=]*\n)*/m 

...

答えて

0

あなたの質問は少しあいまいですが、あなたは、次の試みることができます。

これはで動作します: '=' セクション

  • の名前を取り込む '(+ wは\)' いくつかのオプションの先頭の空白
  • を一致する '\ *はS'

    • はスペースがスペースに等しく一致しましたセパレータ
    • 「([^ =] * \ n)が」は、次に等号を含み、改行で終了しない文字列をキャプチャ
    • 「*」とそれはありません、その最後のビットを複数回

    複数行を設定するには、mフラグが必要です。

    迅速各試合のために出力されるグループ...

    https://regex101.com/r/oDKSy9/1

    を参照するには、以下を参照してください(注:gフラグは、おそらくあなたは正規表現を使用する方法に応じて必要とされることはありません。)

  • +0

    感謝。この正規表現をsedコマンドで書くことができますか? – user6920966

    +0

    たとえば、add sectionを新しい値に置き換えるか、削除します。 – user6920966

    +0

    私はこの解決策を見つける: sed ':a; N; $!ba; s/\(add = \([^ =] * \ n \)* \)/ stringReplace/g' fileName – user6920966

    0

    OPによる解決策。

    私はこの解決策を見つける:

    csplit -k fileName '/.*=/' '{*}' 
    

    おかげ@haggisandchips

    関連する問題