-2

私はこれらの行をすべての行が単語で始まり、次に等しいいくつかの文であるため、すべてのセクションを選択するのが好きです。例えば:

      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 

私は正規表現でそれをするのが好きです。

4

2 に答える 2

0

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

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

... 最後のセクションは \n で終了する必要があります。

これは次のように機能します。

  • '\s*' は、オプションの先頭の空白に一致します
  • '(\w+)' セクションの名前をキャプチャ
  • ' = ' は、スペースとスペースの区切り記号に一致します
  • '([^=]*\n)' 次に、等号を含まず、改行で終わる文字列をキャプチャします
  • 「*」で、最後のビットを複数回実行します

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

マッチごとに出力されるグループをすばやく確認するには、以下を参照してください ...

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

(注: g フラグは、正規表現の使用方法によっては必要ない場合があります。)

于 2016-10-26T13:18:12.883 に答える
0

OPによる解決策。

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

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

ありがとう @haggisandchips

于 2017-08-20T03:34:25.577 に答える