在 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
是八进制的 x0D
和 x0A
用于替换的字符只是作为tr
的第二个参数的空格。
【讨论】:
没有tr '\15\12' ' ' < file_name.csv
和tr '\x0D\x0a' ' ' < file_name.csv
工作
这会将相应的控制字符替换为空格;但 OP 的问题不在于控制字符。无论如何,您希望 tr -s
抑制重复,即用单个空格替换这些控制字符的序列。【参考方案2】:
如果文本包含文字反斜杠,则需要将它们加倍。
sed -i -e 's/\\x0D\\x0A/ /g' file_name.csv
【讨论】:
以上是关于在 Unix 中将 \x0D\x0A 替换为空格。赛德的主要内容,如果未能解决你的问题,请参考以下文章