3

次のようなテキストファイルがあります

Hi
how are you
<blank>
<blank>
abcd
<blank>
defgh
opqr
<blank>

「some text」blankblank「some text」のようなパターンを持つすべての行を印刷したい

how are you
<blank>
<blank>
abcd

join を使用してパターンを検索することを考えています。しかし、私はそれを行う方法がわかりません。(空白とは、空の行を意味します)

4

2 に答える 2

3
  • 空行:/^(?:(?!\n)\s)*\n/m
  • 非空白行:/^.*\S.*\n/m

したがって、次のすべてのインスタンスを印刷します。

 /
    ^
    (?:
       .*\S.*\n
       (?: (?:(?!\n)\s)*\n ){2}
    )+
    .*\S.*\n
 /mx

唯一のライナーとして:

 perl -0777ne'print /^(?:.*\S.*\n(?:(?:(?!\n)\s)*\n){2})+.*\S.*\n/mg' file

すべての空白行に空白が含まれていない場合は、一部を簡略化できます。

  • 空行:/^\n/m
  • 非空白行:/^.+\n/m

 perl -0777ne'print /^(?:.+\n\n\n)+.+\n/mg' file
于 2012-07-25T17:48:27.507 に答える
1

おそらく私は質問を理解していません。あなたが求めていると思うのは、同じテキスト(「いくつかのテキスト」)を持つ2つの連続した行を一致させてそれらを印刷する方法です。

あなたはこのようなことをすることができます

ファイルが $file に文字列として格納されていると仮定します

print "$1\n$1" while ($file =~ /(.*)(?=\n\1(?:\n|$))/mg);

.* = 何にでもマッチし、可能な限り取得します

() = キャプチャ グループ、この場合は .* を $1 に格納

(?= ... ) = 文字列のその部分を次の一致で使用できるように先読み

\1 = 最初のキャプチャ グループでキャプチャされたもの (つまり、$1)

(?: ... ) = 非キャプチャ グループ

于 2012-07-25T17:48:08.970 に答える