"/M" 複数行アドレスサフィックスの簡単で重要な使用法は何ですか?

GNU sedv4.2.2-7の場合、info sedこれは次のことを意味します。

'/REGEXP/M'
'\%REGEXP%M'
     The 'M' modifier to regular-expression matching is a GNU 'sed'
     extension which directs GNU 'sed' to match the regular expression
     in 'multi-line' mode.  The modifier causes '^' and '$' to match
     respectively (in addition to the normal behavior) the empty string
     after a newline, and the empty string before a newline.  There are
     special character sequences ('\`' and '\'') which always match the
     beginning or the end of the buffer.  In addition, the period
     character does not match a new-line character in multi-line mode.

例は提供されていません。テスト後、/Mこのサフィックスが実際に何であるかは不明です。する。それは次のように振る舞うようですいいえ /M別言します。

それでは、シンプルで重要な使い方は何ですか/M?ここで「最も単純である」とは、Hello Worldが単純で他のプログラムに関する追加の知識を必要としないことを意味し、「重要」は「/ M」なしではできない注目すべきことをしなければならないことを意味します。

たとえば、次のような場合です。

seq 10 | sed -n '<code>;/<some regexp>/Mp'

...次の動作とは異なります。

seq 10 | sed -n '<code>;/<some regexp>/p'

ベストアンサー1

これは、perl regexまたはPCREで使用されるregex演算子のsフラグと同じですm。 (s フラグは perl フラグも削除するが、 の一致改行文字がないため、一致するフラグが必要です。 新しいチーム)。perl(?m)gsedMsMsed.perls.

-zこれらのフラグは、(NULで区切られたレコードを読み取る)を使用したり、コマンドを使用してパターンスペースに行を追加したりするなど、パターンスペースに複数の行が含まGNている場合にのみ機能しますs

$ seq 3 | sed 'N;s/$/<foo>/g'
1
2<foo>
3
$ seq 3 | sed 'N;s/$/<foo>/Mg'
1<foo>
2<foo>
3

それ以降はNパターンスペースにが含まれます1<newline>2。それ以外の場合は、Mパターン$スペースの終わりのみが含まれます。2)とM$パターンスペースの最初の行の末尾にある2つを一致させます。1、改行文字の前)、そしてパターン空間の終わりから(以降2)。

おすすめ記事