簡體   English   中英

如何使用vim文本編輯器刪除文本文件中出現的任何非法換行?

[英]How to remove any illegal new lines appears within a text files using vim text editor?

我正在嘗試修復數據文件,以便可以使用MySQL DATA LOAD INFILE將數據導入數據庫。

我在文件中遇到的問題是文本太長,但文本中包含換行符。 另外,新行也意味着新記錄。 這使我很難將記錄導入MySQL。

如何在Linux中使用vim搜索非法的新行並將其替換為空格?

換行非法:如果在逗號(,)和(,012d000)之間找到新行

這是文件的樣本數據

VST-65654,a0Jd000000FM8cBEAT,Blah,2013-10-22 10:46:30.000000,Blah Blah,2014-01-20 20:27:42.000000,2013-10-18 14:00:00.000000,005d0000002biR4AAI,001d000001NEh0oAAD,In Person,Unscheduled,Grow Applications,High,this is the body

of this 
log test
where I need to

remove all extra new lines,012d0000000ppiXAAQ
VST-122549,a0Jd000000GVwtyEAD,Blah,2013-10-31 18:17:50.000000,Blah,2013-11-06 18:07:47.000000,2013-10-31 18:10:00.000000,005d0000002biR9AAI,001d000001NEaQgAAL,In Person,Scheduled,Grow Applications,Medium,One more long paragraph

where I need to remove all extra

new lines

,012d0000000ppiABCD

這些字段用逗號(,)分隔,並且在找到新行\\ n時應開始新記錄。 我該如何進行搜索替換來解決此問題?

或者如何用雙引號替換所有未轉義的逗號? 也就是說,如果我找到\\,請不要觸摸它,但是如果您發現一個逗號,則將其替換為“,”

謝謝

g/^VST/,-/,012d000/j!

使用全局命令:g將以VST開頭的行與直到下一個012d000所有行連接在一起:j

有關更多幫助,請參見:

:h :g
:h :j
:h [range]

我的regex foo不夠強大,無法在單個命令中做到這一點,但是您可以創建一個宏來實現所需的功能。 以下工作為您提供的輸入

轉到文件開頭

gg

開始錄音

qq

尋找下一個,012d

/,012d<CR>

上一行

k

進入視覺模式

v

轉到上一個逗號

?,<CR>

替換所有換行符

:s/\n//g<CR>

下一行

j

完成錄音

q

重復

@q

結果

VST-65654,a0Jd000000FM8cBEAT,Blah,2013-10-22 10:46:30.000000,Blah Blah,2014-01-20 20:27:42.000000,2013-10-18 14:00:00.000000,005d0000002biR4AAI,001d000001NEh0oAAD,In Person,Unscheduled,Grow Applications,High,this is the body of this log test where I need to remove all extra new lines,012d0000000ppiXAAQ
VST-122549,a0Jd000000GVwtyEAD,Blah,2013-10-31 18:17:50.000000,Blah,2013-11-06 18:07:47.000000,2013-10-31 18:10:00.000000,005d0000002biR9AAI,001d000001NEaQgAAL,In Person,Scheduled,Grow Applications,Medium,One more long paragraph where I need to remove all extra new lines ,012d0000000ppiABCD

我喜歡@Peter Rincker的回答。 至於您最后提出的問題,您可以將所有未轉義的逗號替換為","使用

:%s/\\\@<!,/","/g

在這里, \\\\代表文字反斜杠,而\\@<! 是修飾符。 (請參閱:help /\\@<!

該解決方案的問題在於您沒有正確定義什么是未轉義的逗號。 例如, \\\\,是轉義的反斜杠,后跟一個未轉義的逗號。 我相信/\\\\\\@<!\\%(\\\\\\\\\\)*\\zs,/是正確的模式,但我並不是說它很漂亮。 如果使用“ very magic”版本會更好一些: /\\v\\\\@<!%(\\\\\\\\)*\\zs,/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM