我有一个文件在其中一个字段中有换行符。 例如: 见第三行:
"A"|"USD"|"123"|"AIRPROMOTION"|"EXPIRE"
"B"|"USD"|"456"|"AIRPROMOTION"|"EXPIRE"
"C"|"USD"|"789
"|"AIRPROMOTION"|"EXPIRE"
我尝试了perl -p00e 's/\n"|//g'
命令,该命令对于一个小文件工作得很好。但是我的文件很大(~100MB)并且它提供了“分段错误”#39;错误。
还有什么其他选择?
答案 0 :(得分:1)
分段错误的原因是你启用了slurp模式。不要那样做。而是逐行读取文件。
试试这个
perl -lne 'my $nxt_line = <>;($nxt_line=~m/^"\|"/)?print "$_$nxt_line":print "$_"' file.txt
在上面的脚本$nxt_line
中将存储文件的下一行..然后使模式匹配来执行此操作。
答案 1 :(得分:0)
试试这个!应该像魅力一样工作!
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n"/"/g' input_file > output_file
答案 2 :(得分:-1)
我会使用Notepad ++替换功能(\ r \ n \ r \ n并将其替换为\ r \ n)。
如果你没有,你可以免费下载Notepad ++,它是非常有用的应用程序,有很多用途。
在“查看”菜单中,选择“显示符号”并选中“显示所有字符”。
按Cntrl + H或单击“搜索菜单”并选择“替换...”选项 在查找内容中键入\ r \ n \ r \ n: 输入\ r \ n取代它 单击全部替换按钮。
PS:你提供的文字不只是LF,它是CRLF,\ r \ n。你可以试试你的方法。请记住,您只想用一个CRLF替换CRLFCRLF,否则您将丢失所有CRLF并且所有文本将显示在一行中。