非常に大きなファイルがあり、各行の末尾にあるすべての改行文字を削除して、行が文字で始まる場合を除いてすべてをマージしたい £
.
だから、私がこれを持っている場合:
data1
data2
£data3
data4
data5
私はこれで終わりたいと思います:
data1data2
£data3data4data5
みたいなことを考えていた
:%s/\n(but not \n£)//g
何か案は?
すべての新しい行を削除してから、本来あるべき場所に再度追加してください。または、否定的な先読みを使用しますが、これはよりシンプルで簡単で、誰にとっても理解しやすいものです。
s/\n//g
s/£/\n£/g
@ pb2q が提供するソリューションは、この文字が「£」または改行でない場合、すべての改行と次の文字を削除します(コレクションはデフォルトで改行と一致しないため) が、質問では改行のみを削除するように求められました。これは、または否定的な先読みを使用することで修正できます。\ze
%s/\n\ze\_[^£]
%s/\n£\@!
いくつかのことに注意してください: まず、テキストを削除したい場合は、置換文字列を省略できます (この場合は不要な置換フラグが必要な場合を除きます)。次に、\_
改行をコレクションに追加します。のように書くこともできますが[^£\n]
、これはあなたができる最善のことではないと思います: PCRE 対応の言語から来た人は、[^£\n]
「'£' と改行以外のすべてに一致する」と考えていますが、Vim では実際には「 '£' 以外のすべて (改行を含む) に一致します。
次の:global
コマンドを使用します。
:g/^[^£]/-j!
以外の任意の文字で始まるすべての行を £
上から下に調べ、:join
コマンドを介してそれらの各行を前の行と結合します。