在 Perl 中,如何从文件中删除 ^M?
我有一个脚本将新字段附加到现有 CSV,但是 ^M
字符出现在旧行的末尾,因此新字段最终会出现在新行而不是同一行上。 如何使用 Perl 从 CSV 文件中删除 ^M
字符?
I have a script that is appending new fields to an existing CSV, however ^M
characters are appearing at the end of the old lines so the new fields end up on a new row instead of the same one. How do I remove ^M
characters from a CSV file using Perl?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
^M 是回车符。 你可以这样做:
^M is carriage return. You can do this:
或者 1 行:
Or a 1-liner:
您发现您还可以这样做:
You found out you can also do this:
稍微不相关,但要使用 Perl 从命令行中删除 ^M,请执行以下操作:
Slightly unrelated, but to remove ^M from the command line using Perl, do this:
我更喜欢一个更通用的解决方案,可以使用 DOS 或 Unix 输入。 假设输入来自 STDIN:
I prefer a more general solution that will work with either DOS or Unix input. Assuming the input is from STDIN:
这一行替换了所有 ^M 字符:
您可以从 Perl 内部或直接在 Unix 提示符下调用它。
This one liner replaces all the ^M characters:
You can call this from inside Perl or directly on your Unix prompt.
要将 DOS 样式转换为 UNIX 样式行结尾:
或者,删除 UNIX 和/或 DOS 样式行结尾:
To convert DOS style to UNIX style line endings:
Or, to remove UNIX and/or DOS style line endings:
这就是解决我的问题的方法。 ^M 是回车符,在 Perl 脚本中可以轻松避免。
This is what solved my problem. ^M is a carriage return, and it can be easily avoided in a Perl script.
我有一个小脚本。 对它的修改有助于过滤掉跨平台遗留文件中的一些其他不可打印的字符。
Little script I have for that. A modification of it helped to filter out some other non-printable characters in cross-platform legacy files.
perl 命令将 dos 行结尾转换为 unix 行结尾,并备份原始文件:
此命令生成以 unix 行结尾的文件名,并将原始文件保留为 filename.bak。
perl command to convert dos line ending to unix line ending with backup of the original file:
This command generates filename with unix line ending and leaves the original file as filename.bak.
在 vi 中点击
:
。然后是
s/Control-VControl-M//g
。Control-V
Control-M
显然就是这些键。 别把它拼出来。In vi hit
:
.Then
s/Control-VControl-M//g
.Control-V
Control-M
are obviously those keys. Don't spell it out.