将源作为平面文件获取并删除回车符和 \n ...特殊字符?

将源作为平面文件获取并删除回车符和 \n ...特殊字符?

我遇到一个问题,我得到的平面文件源包含大量带有 PIPE 分隔符的记录,并且其中一个字段正在获取回车符(多行)并以换行符 ( \n) 开头。那么如何删除\n文件中的字符呢?

例子:

-000123456|1654321|6/12/2002 8:49:20 AM|
tt Cynthia L Eggleston E456585 remove move the funds adv account in fcle flagged on 710091 pmt due 12-16- 15|

谁能建议如何进行?

答案1

如果您知道该字段\n在所有记录中均以该字段开头,则可以sed按如下方式使用:

sed "N;s/|\n/|/"

摆脱新线。请注意,由于sed用作\n行分隔符,因此您首先必须将下一行连接到已处理的行(命令N),在此过程中sed在连接的行之间插入换行符。

如果这个问题是随机出现的(不是在每条记录中),您将不得不求助于更强大的工具来解析文件内容 - 基本上您需要对字段进行计数。或者awk或者可以优雅地完成这个技巧(我认为它可以在以及perl中完成,但你可能不想去sed那个方向)。

答案2

您可以使用许多工具,但sed这些工具正是针对以下情况而构建的:

 sed -i 's,\\n,,g' Flatfile

为了向您展示它是如何工作的,这里是与您刚刚提供的输入相同的表达式:

$ echo '-000123456|1654321|6/12/2002 8:49:20 AM|\n tt Cynthia L Eggleston E456585 remove move the funds adv account in fcle flagged on 710091 pmt due 12-16- 15|' | sed 's,\\n,,g'
-000123456|1654321|6/12/2002 8:49:20 AM| tt Cynthia L Eggleston E456585 remove move the funds adv account in fcle flagged on 710091 pmt due 12-16- 15|

它只是查找字符串\n并将其替换为空的零长度字符串(有效地删除它)。有两个\,因此\n失去了其特殊(换行符)含义,可以作为两个字符进行匹配。

相关内容