如何替换掉文件列中的回车换行符号

时间:2021-12-16 04:30:56
各位好:
最近遇到个棘手的问题,从数据库中导出文件的列中(客户名称等列)包含了回车换行符号,导致我使用这个文件的时候,区分换行符,遇到中间列的换行符号,就自动换行了,导致后面列的顺序都乱套了。请问这个问题,怎么在linux中直接给列中包含的回车换行符号替换掉!但是不能替换掉最后一行的换行符号!能用shell最好了,谢谢
(我曾是想过导出文件时候用别的符号,但是这个客户名称等类似的列,是人工输入的,任何符号都可能出现,所以还是想问问能不能把列中包含的回车换行符号替换掉!)

9 个解决方案

#1


围观。。。。

#2


猜测楼主的意思是文件每一行都是用换行(0a) 结束,但是文件中个别域中含有回车换行序列(0d0a),然后楼主想要把0d0a序列去掉但是保留0a?如果是这样,楼主接着往下看

$cat c.txt
row1_column1 row1_column2_lhs
row1_colum2_rhs row1_column3 row1_column4
row2_column1 row2_column2_lhs
row2_colum2_rhs row2_column3 row2_column4
row3_column1 row3_column2_lhs
row3_colum2_rhs row3_column3 row3_column4

其中 每一行的column2 被分成lhs和rhs,用0d0a隔开,一共3行,下面的命令行可以把0d0a 换成 连字符 -:

$perl -0777 -pe 's/\x0d\x0a/-/g' c.txt
row1_column1 row1_column2_lhs-row1_colum2_rhs row1_column3 row1_column4
row2_column1 row2_column2_lhs-row2_colum2_rhs row2_column3 row2_column4
row3_column1 row3_column2_lhs-row3_colum2_rhs row3_column3 row3_column4


#3


你这问题描述不是很明确,何为真正的一行,行结束字符是什么,因为换行符已经无法作为换行判断了

#4


引用 2 楼 Cody2k3 的回复:
猜测楼主的意思是文件每一行都是用换行(0a) 结束,但是文件中个别域中含有回车换行序列(0d0a),然后楼主想要把0d0a序列去掉但是保留0a?如果是这样,楼主接着往下看

$cat c.txt
row1_column1 row1_column2_lhs
row1_colum2_rhs row1_column3 row1_column4
row2_column1 row2_column2_lhs
row2_colum2_rhs row2_column3 row2_column4
row3_column1 row3_column2_lhs
row3_colum2_rhs row3_column3 row3_column4

其中 每一行的column2 被分成lhs和rhs,用0d0a隔开,一共3行,下面的命令行可以把0d0a 换成 连字符 -:

$perl -0777 -pe 's/\x0d\x0a/-/g' c.txt
row1_column1 row1_column2_lhs-row1_colum2_rhs row1_column3 row1_column4
row2_column1 row2_column2_lhs-row2_colum2_rhs row2_column3 row2_column4
row3_column1 row3_column2_lhs-row3_colum2_rhs row3_column3 row3_column4



恩,谢谢2楼的回复,刚才解答能结汇 回车换行的情况(0d0a),但是如果遇到 个别域中含有换行序列(0a)的情况,换行也是用序列(0a),能不能替换掉域中的换行序列(0a) 呢?

#5


这种情况下有歧义哈,无法区分两个0a,必须要能够找出一个确定的特征来区分它们,然后就是常规的字符串替换了

#6


libreoffice 替换,特殊格式,应该有段落之类
不过,似乎全部替换了

可以换行符加行首空格呢?

#7


导出的列用引号“”包含,你替换时只替换引号内的换行符为空格。
具体自己做吧。

#8


引用 5 楼 Cody2k3 的回复:
这种情况下有歧义哈,无法区分两个0a,必须要能够找出一个确定的特征来区分它们,然后就是常规的字符串替换了



这个办法可行 ,请问如果用单引号区分的话,这个命令该怎么写呀,我shell写的不是太好,谢谢!

#9


楼主还是给个具体例子哈,比如两行数据,这样说辞难达意

#1


围观。。。。

#2


猜测楼主的意思是文件每一行都是用换行(0a) 结束,但是文件中个别域中含有回车换行序列(0d0a),然后楼主想要把0d0a序列去掉但是保留0a?如果是这样,楼主接着往下看

$cat c.txt
row1_column1 row1_column2_lhs
row1_colum2_rhs row1_column3 row1_column4
row2_column1 row2_column2_lhs
row2_colum2_rhs row2_column3 row2_column4
row3_column1 row3_column2_lhs
row3_colum2_rhs row3_column3 row3_column4

其中 每一行的column2 被分成lhs和rhs,用0d0a隔开,一共3行,下面的命令行可以把0d0a 换成 连字符 -:

$perl -0777 -pe 's/\x0d\x0a/-/g' c.txt
row1_column1 row1_column2_lhs-row1_colum2_rhs row1_column3 row1_column4
row2_column1 row2_column2_lhs-row2_colum2_rhs row2_column3 row2_column4
row3_column1 row3_column2_lhs-row3_colum2_rhs row3_column3 row3_column4


#3


你这问题描述不是很明确,何为真正的一行,行结束字符是什么,因为换行符已经无法作为换行判断了

#4


引用 2 楼 Cody2k3 的回复:
猜测楼主的意思是文件每一行都是用换行(0a) 结束,但是文件中个别域中含有回车换行序列(0d0a),然后楼主想要把0d0a序列去掉但是保留0a?如果是这样,楼主接着往下看

$cat c.txt
row1_column1 row1_column2_lhs
row1_colum2_rhs row1_column3 row1_column4
row2_column1 row2_column2_lhs
row2_colum2_rhs row2_column3 row2_column4
row3_column1 row3_column2_lhs
row3_colum2_rhs row3_column3 row3_column4

其中 每一行的column2 被分成lhs和rhs,用0d0a隔开,一共3行,下面的命令行可以把0d0a 换成 连字符 -:

$perl -0777 -pe 's/\x0d\x0a/-/g' c.txt
row1_column1 row1_column2_lhs-row1_colum2_rhs row1_column3 row1_column4
row2_column1 row2_column2_lhs-row2_colum2_rhs row2_column3 row2_column4
row3_column1 row3_column2_lhs-row3_colum2_rhs row3_column3 row3_column4



恩,谢谢2楼的回复,刚才解答能结汇 回车换行的情况(0d0a),但是如果遇到 个别域中含有换行序列(0a)的情况,换行也是用序列(0a),能不能替换掉域中的换行序列(0a) 呢?

#5


这种情况下有歧义哈,无法区分两个0a,必须要能够找出一个确定的特征来区分它们,然后就是常规的字符串替换了

#6


libreoffice 替换,特殊格式,应该有段落之类
不过,似乎全部替换了

可以换行符加行首空格呢?

#7


导出的列用引号“”包含,你替换时只替换引号内的换行符为空格。
具体自己做吧。

#8


引用 5 楼 Cody2k3 的回复:
这种情况下有歧义哈,无法区分两个0a,必须要能够找出一个确定的特征来区分它们,然后就是常规的字符串替换了



这个办法可行 ,请问如果用单引号区分的话,这个命令该怎么写呀,我shell写的不是太好,谢谢!

#9


楼主还是给个具体例子哈,比如两行数据,这样说辞难达意