这又是一个与Unix和Windows中的行尾字符有关的问题。
我有一个sql提取,其中某些字段可以包含带有换行符的文本。
当我将此提取物带到linux机器并在VI中使用:se list选项设置将其打开时,我看到如下文本:
1 some broken Text part 1 - Line1$
2 other broken text part 2 -line 2^M$
3 good line ^M$
我需要检测未以回车(CR)或^ M结尾的行,并查看其是否包含具有换行符的值。
在上面的摘录中,基本上我需要将第1行和第2行连接起来,只想出一条线
1 'some broken Text part 1 - Line1 other broken text part 2 -line 2^M$
第3行没有任何变化,该行将成为文件的第2行。
我尝试使用tr删除\ n,但是整个文件在VI中仅占1行。 删除\ n之后,我尝试用\ r \ n替换\ r,但是它在文件中引入了意外的行为。
任何能帮助您解决此问题的帮助。
答案 0 :(得分:-1)
您可以将\n
替换为空格,将\r
替换为\n
:
$ printf 'some broken Text part 1 - Line1
other broken text part 2 -line 2\r
goodline\r\n' > file.txt
$ cat -vE file.txt
some broken Text part 1 - Line1$
other broken text part 2 -line 2^M$
goodline^M$
$ tr '\n\r' ' \n' < file.txt
some broken Text part 1 - Line1 other broken text part 2 -line 2
goodline
答案 1 :(得分:-1)
以下是绝招:
tr -d '\n' < file.txt > step1-file.txt
sed -i -e 's/\r/\r\n/g' step1-file.txt
某种程度上,我之前尝试使用的以下perl行引入了意外行为。
perl -pi -e 's/\r/\r\n/' step1-file.txt