在 Unix 中将 \x0D\x0A 替换为空格。赛德

Posted

技术标签:

【中文标题】在 Unix 中将 \\x0D\\x0A 替换为空格。赛德【英文标题】:Replace \x0D\x0A with a space in Unix. Sed在 Unix 中将 \x0D\x0A 替换为空格。赛德 【发布时间】:2018-10-31 16:24:01 【问题描述】:

我正在尝试用空格自动替换换行符 (\x0A) 和回车符 (\x0D)。

这些字符出现在我从 Windows 中的 Sybase 数据库中以 UTF-8 编码导出的表中。我在 Unix 中操作文件。

到目前为止,我可以在文本编辑器中手动删除它们,使用普通搜索模式(不是转义字符选项),但我想为多个表运行它。

我用过不成功:

sed -i -e 's/\x0D\x0A/ /g' file_name.csv

已编辑

sed -i -e 's/%\x0D\x0A%/ /g' file_name.csv
sed -i -e 's/%\CR\LF%/ /g' file_name.csv
sed -i -e 's/%\r\n%/ /g' file_name.csv
tr '\15\12'  '  ' < file_name.cvs
tr '\x0D\x0A'  '  ' < file_name.cvs

表格的一行是这样的:

30,57786,'B1','Philadelphia Coll Pharm 1879\x0D\x0A','Leaves'

【问题讨论】:

为什么是\x0D\x0A 而不是\r\n -i -e 表示法通常与perl 一起使用,而不是sed @tadman \x0D\x0A 在 .cvs 以及在数据库中创建的表的条目中可见 一个非常常见的变化是要求删除经常这样表示的控制字符;但是您似乎有文字文本反斜杠、字母 x、零、大写 D 等,对吗? @tadman -e 非常常与sed 一起使用,许多现代 Sed 实现都有一个 -i 选项,其工作方式类似于 Perl 中的选项。 【参考方案1】:

您可以在 tr 中轻松做到这一点,这需要八进制表示法:

 tr '\15\12' '  ' < file_name.csv
\15\12 是八进制的 x0Dx0A 用于替换的字符只是作为tr 的第二个参数的空格。

【讨论】:

没有tr '\15\12' ' ' &lt; file_name.csvtr '\x0D\x0a' ' ' &lt; file_name.csv 工作 这会将相应的控制字符替换为空格;但 OP 的问题不在于控制字符。无论如何,您希望 tr -s 抑制重复,即用单个空格替换这些控制字符的序列。【参考方案2】:

如果文本包含文字反斜杠,则需要将它们加倍。

sed -i -e 's/\\x0D\\x0A/ /g' file_name.csv

【讨论】:

以上是关于在 Unix 中将 \x0D\x0A 替换为空格。赛德的主要内容,如果未能解决你的问题,请参考以下文章

wps如何设置按tab就出4个空格?

linux下怎样改Tab键的缩进个数?

为啥WORD转换PDF时字体会丢失?

如何判断字符串中是不是存在特殊符号?

excel如何检查一列数字是不是连续?

LINUX VI编辑器里怎么查找带空格和符号的关键字?