![清理包含各种 CR 和 LF 换行符的文本文件](https://linux22.com/image/1375687/%E6%B8%85%E7%90%86%E5%8C%85%E5%90%AB%E5%90%84%E7%A7%8D%20CR%20%E5%92%8C%20LF%20%E6%8D%A2%E8%A1%8C%E7%AC%A6%E7%9A%84%E6%96%87%E6%9C%AC%E6%96%87%E4%BB%B6.png)
我正在尝试将包含备忘录的文本文件导入 mySQL。我不知道他们是如何做到这一点的,但是虽然备忘录字段始终以 CR LF 结尾,但文本本身的部分内容也包含 CR、LF 和 CR LF 换行符的混合。
这自然会破坏我的导入能力,因为没有明确的迹象表明什么构成了换行符。大约一半的数据在导入过程中丢失,而 25% 的数据最终被截断。
有什么可行的方法可以解决这一问题?它最初是从 Access 导出的。
谢谢!
答案1
如果正确的 CR+LF 位于 Memo 字段周围的单引号之外,则以下后视应该可以匹配要删除的 CR+LF:
(?<!')\r\n
原始答案:
您可以在文本文件上运行正则表达式吗?
\r\n?|\n
用您想要的换行符替换每个匹配项,例如\r\n
。
答案2
根据您想要保留的内容(CR-LF 或 LF),您可以使用unix2dos/dos2unix样式实用程序可以将导入的文件从 CR-LF 转换并清理为 LF 或反之亦然,以使其始终保持一致。
如果你使用的是 Unix/Linux 平台,那么你应该可以使用 dos2unix 和 unix2dos 命令。
如果你使用的是 Windows 并且没有赛格威(或同等的),你可以尝试托弗罗多斯。
答案3
如果数据本身包含 CR LF,并且它们没有用某种限定符(例如“”)括起来,那么显然这些行将被分成多行。最好的办法是清理 Access 中的数据并再次导出。如果 CR LF 符合条件,那么您应该能够操作文件(我可能会使用 AWK)并用 \n 替换不合格的 CR LF。
为了更加精确,我需要了解更多有关数据的信息。