0

コンマを除く任意の文字と空白を正規表現と一致させたいと思います。コンマ以外の任意の文字に一致するだけで、次のようになります。

[^,]*

しかし、文字列内の任意の場所にある空白文字、タブ、スペース、改行などにも一致させたいと考えています。

編集:

これは、%s/foo/bar/gc 経由で vim で sed を使用しています。

次の例では、 func からコンマまで検索したいと考えています。

func("bla bla bla"
  "asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")

4

2 に答える 2

0

を使用して作業するmultilineには、こちらを参照してください。SEDRegEx

編集:

コマンドではSED、NewLine の操作は少し異なります。SEDコマンドは、複数行操作を管理する 3 つのパターンをサポートしNPDます。それがどのように機能するかを確認するには、この(Working with Multiple Lines) の説明を参照してください。ここでは、これら 3 つの操作について説明します。

私の推測では、N演算子はここに欠けている考慮事項の領域です。演算子を追加すると、文字列Nでセンスできるようになり\nます。

ここからの例:

sed スクリプトで改行文字を使用したい場合があります。さて、これにはいくつかの微妙な問題があります。新しい行を検索したい場合は、「\n」を使用する必要があります。次の例では、フレーズを検索し、そのフレーズの後の改行文字を削除して、2 つの行を結合しています。

(エコー a;エコー x;エコー y) | sed '/x$/ { N s:x\n:x: }'

生成する

xy

ただし、改行を挿入する場合は、「\n」を使用しないでください。代わりに、リテラル改行文字を挿入します。

(エコー a;エコー x;エコー y) | sed 's:x:X\:'

生成する

X

y

于 2012-11-17T11:13:00.367 に答える
0

したがって、基本的には、複数の行にわたってパターンを一致させようとしています。

でそれを行う1つの方法を次に示しsedます(ただし、これらは 内で使用できないことは確かvimですが、 内でこれを複製する方法がわかりませんvim

sed '
    /func/{
            :loop
            /,/! {N; b loop}
            s/[^,]*/func("ok"/
    }
' inputfile

inputfileこれらの行が含まれているとしましょう

func("bla bla bla"
  "asdfasdfasdfasdfasdfasdf"
"asdfasdfasdf", "more strings")

出力は

func("ok", "more strings")


詳細

  • 行に が含まれている場合はfunc、中かっこを入力します。
  • :loopという名前のレーベルですloop
  • 行に含まれていない場合,(それが/,/!意味することです)
    • 次の行をパターンスペースに追加 ( N)
    • ラベルに分岐 /loopラベルに移動 ( b loop)
  • ,そのため、行の追加とが見つかるまでループし続けs、最初のコンマの前のすべての文字を (複数行の) パターン スペースと照合して置換を実行するコマンドが実行されます。
于 2012-11-17T18:38:07.460 に答える