2016-04-14 17 views
1

I正規表現正規表現内の改行文字が行全体と一致するのはなぜですか?

^1.*\n 

停止、その後、任意の数の文字および改行文字に続く1で始まる行と一致する必要があり、それを理解できるように。 Perlの正規表現を使用すると、その後、任意の数の文字と改行文字、次の行の全体に続いて1で始まる行と一致しているとき、それは実際に何をするか:私は実際に長いに取り組んでいた

-bash-3.2$ cat testfile 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 
3 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 
3 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 
3 dghdfgdgdgdfgdfggd 

-bash-3.2$ grep -P '^1.*' testfile 
1 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
-bash-3.2$ grep -P '^1.*\n' testfile 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 
1 dghdfgdgdgdfgdfggd 
2 dghdfgdgdgdfgdfggd 

なぜそれがうまくいかなかったのか不思議に思って、それを上記の問題にまで追跡しました。私の質問は主に「なぜこのように行動しているのか」ですが、私が望むマッチを得る方法を聞いてうれしいです。

おかげデフォルトで

+0

'-oP'オプションを渡そうとしましたか? 'grep -oP '^ 1。* \ n' testfile'です。 [* '--only-matching' - 一致する行の一致した(空ではない)部分だけを出力し、そのような部分は別々の出力行に出力します。*](http://www.gnu.org/software/ grep/manual/grep.html) –

答えて

1

は、grep出力はラインにマッチしました。その動作を無効にするには、-oオプションを渡します。

grep -oP '^1.*\n' testfile`. 

grep documentation参照:上のこのような各部分と、マッチラインの

-o
    --only-matching
        プリントのみ一致した(空でない)部品別個の出力ライン。

+0

<恥ずかしい顔>私はそれを知っていた!どのようなnumpty。ありがとう:) – mazz0

関連する問題