1

非常に大きなファイルがあり、各行の末尾にあるすべての改行文字を削除して、行が文字で始まる場合を除いてすべてをマージしたい £.

だから、私がこれを持っている場合:

data1
data2
£data3
data4
data5

私はこれで終わりたいと思います:

data1data2
£data3data4data5

みたいなことを考えていた

:%s/\n(but not \n£)//g

何か案は?

4

3 に答える 3

4

すべての新しい行を削除してから、本来あるべき場所に再度追加してください。または、否定的な先読みを使用しますが、これはよりシンプルで簡単で、誰にとっても理解しやすいものです。

s/\n//g
s/£/\n£/g
于 2012-05-26T18:24:33.690 に答える
2

@ pb2q が提供するソリューションは、この文字が「£」または改行でない場合、すべての改行と次の文字を削除します(コレクションはデフォルトで改行と一致しないため) が、質問では改行のみを削除するように求められました。これは、または否定的な先読みを使用することで修正できます。\ze

%s/\n\ze\_[^£]
%s/\n£\@!

いくつかのことに注意してください: まず、テキストを削除したい場合は、置換文字列を省略できます (この場合は不要な置換フラグが必要な場合を除きます)。次に、\_改行をコレクションに追加します。のように書くこともできますが[^£\n]、これはあなたができる最善のことではないと思います: PCRE 対応の言語から来た人は、[^£\n]「'£' と改行以外のすべてに一致する」と考えていますが、Vim では実際には「 '£' 以外のすべて (改行を含む) に一致します。

于 2012-05-26T19:40:35.350 に答える
0

次の:globalコマンドを使用します。

:g/^[^£]/-j!

以外の任意の文字で始まるすべての行を £上から下に調べ、:joinコマンドを介してそれらの各行を前の行と結合します。

于 2012-05-27T02:56:04.887 に答える