最近遇到个棘手的问题,从数据库中导出文件的列中(客户名称等列)包含了回车换行符号,导致我使用这个文件的时候,区分换行符,遇到中间列的换行符号,就自动换行了,导致后面列的顺序都乱套了。请问这个问题,怎么在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
$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楼的回复,刚才解答能结汇 回车换行的情况(0d0a),但是如果遇到 个别域中含有换行序列(0a)的情况,换行也是用序列(0a),能不能替换掉域中的换行序列(0a) 呢?
#5
这种情况下有歧义哈,无法区分两个0a,必须要能够找出一个确定的特征来区分它们,然后就是常规的字符串替换了
#6
libreoffice 替换,特殊格式,应该有段落之类
不过,似乎全部替换了
可以换行符加行首空格呢?
不过,似乎全部替换了
可以换行符加行首空格呢?
#7
导出的列用引号“”包含,你替换时只替换引号内的换行符为空格。
具体自己做吧。
具体自己做吧。
#8
这个办法可行 ,请问如果用单引号区分的话,这个命令该怎么写呀,我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
$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楼的回复,刚才解答能结汇 回车换行的情况(0d0a),但是如果遇到 个别域中含有换行序列(0a)的情况,换行也是用序列(0a),能不能替换掉域中的换行序列(0a) 呢?
#5
这种情况下有歧义哈,无法区分两个0a,必须要能够找出一个确定的特征来区分它们,然后就是常规的字符串替换了
#6
libreoffice 替换,特殊格式,应该有段落之类
不过,似乎全部替换了
可以换行符加行首空格呢?
不过,似乎全部替换了
可以换行符加行首空格呢?
#7
导出的列用引号“”包含,你替换时只替换引号内的换行符为空格。
具体自己做吧。
具体自己做吧。
#8
这个办法可行 ,请问如果用单引号区分的话,这个命令该怎么写呀,我shell写的不是太好,谢谢!
#9
楼主还是给个具体例子哈,比如两行数据,这样说辞难达意