我正在嘗試使用GREP從文件中選擇多行記錄。爲什麼GREP無法容忍多個 n字符
的記錄看起來就像是
########## Ligand Number : 1
blab bla bla
bla blab bla
########## Ligand Number : 2
blab bla bla
bla blab bla
########## Ligand Number : 3
bla bla bla
<EOF>
我使用Perl的正則表達式(-P)。
繞過GREP多行限制,我使用grep -zo。這樣,解析器可以消耗多行並輸出我想要的。一般來說,它工作正常。
然而,問題是分隔符這裏是最後的記錄行結束後兩個空行(三連冠「\ n」字符:一個是端線和兩個用於兩個空行)。
當我嘗試使用表達式像
grep -Pzo '^########## Ligand Number :\s+\d+.+?\n\n\n' inputFile
它沒有返回。看起來,grep不能容忍連續的'\ n'字符。
有人可以給一個解釋嗎?
P.S.我已經繞過它,先將'\ n'字符翻譯爲'\ a',然後將它們翻譯回來。這樣下面的例子:
cat inputFile | tr '\n' '\a' | grep -Po '########## Ligand Number :\s+\d+\a.+?\a\a\a' | tr '\a' '\n'
但是我需要了解爲什麼不能grep的理解 '\ n \ n \ n' 模式。
在開始處添加'(?s)',或用'[\ s \ S]'替換'.'。在PCRE正則表達式中,'.'默認不符合換行符號,'s'修飾符使POSIX像點行爲一樣。 –
@WiktorStribiżew 請仔細閱讀我的問題,直到最後。我清楚地問:「爲什麼GREP無法理解'\ n \ n \ n'模式? –
電腦無法「理解」任何東西。引擎是否匹配一個字符串。 PCRE正則表達式中的'.'與'\ n'不匹配。 –