次のようなテキストファイルがあります
Hi
how are you
<blank>
<blank>
abcd
<blank>
defgh
opqr
<blank>
「some text」blankblank「some text」のようなパターンを持つすべての行を印刷したい
how are you
<blank>
<blank>
abcd
join を使用してパターンを検索することを考えています。しかし、私はそれを行う方法がわかりません。(空白とは、空の行を意味します)
次のようなテキストファイルがあります
Hi
how are you
<blank>
<blank>
abcd
<blank>
defgh
opqr
<blank>
「some text」blankblank「some text」のようなパターンを持つすべての行を印刷したい
how are you
<blank>
<blank>
abcd
join を使用してパターンを検索することを考えています。しかし、私はそれを行う方法がわかりません。(空白とは、空の行を意味します)
/^(?:(?!\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
おそらく私は質問を理解していません。あなたが求めていると思うのは、同じテキスト(「いくつかのテキスト」)を持つ2つの連続した行を一致させてそれらを印刷する方法です。
あなたはこのようなことをすることができます
ファイルが $file に文字列として格納されていると仮定します
print "$1\n$1" while ($file =~ /(.*)(?=\n\1(?:\n|$))/mg);
.* = 何にでもマッチし、可能な限り取得します
() = キャプチャ グループ、この場合は .* を $1 に格納
(?= ... ) = 文字列のその部分を次の一致で使用できるように先読み
\1 = 最初のキャプチャ グループでキャプチャされたもの (つまり、$1)
(?: ... ) = 非キャプチャ グループ