如何从文件中删除“^ @”字符?

时间:2017-02-20 07:08:14

标签: shell replace

我正在尝试重定向isql(Sybase)的输出,并且文件在行^@的末尾返回奇怪的字符。我需要为完整文件删除此char。我无法在查询中使用输出重定向,因为我所拥有的BBDD没有实现此功能。

示例:

Node:SNMP_ALU_FTTH:INACT:Rack_1_SubRack_1_Slot_5_PON_4_ONT_34^@;Network Fail^@;1487336303;

只有在我重定向到文件时才会发生这种情况:

./script.pl > result.txt

系统信息:

Linux XXXXXXX 2.6.18-194.el5#1 SMP Tue Mar 16 21:52:39 EDT 2010 x86_64 x86_64 x86_64 GNU / Linux

我试过对文件执行“dos2unix”但没有改变

2 个答案:

答案 0 :(得分:2)

正如在评论中已经提到的,这个符号是空字符的表示,它实际上是一个非打印字符。

如果您回显一个空分隔的字符串,或者如果您捕获一个空的分隔文件,您将看不到任何内容。

要回答您的问题,可以使用tr实用程序删除空字符。

例如,使用tr '\0' '\n' <file(或<<<"$var")会将空字符音译为新行。
类似地,tr '\0' ' '会将空字符转换为空格等。

或者您可以使用tr -d '\0'删除空字符。

注:
在开始使用字符串中存在的空字符之前,请确保您知道自己在做什么...请注意,许多程序能够处理空字符作为输入字段分隔符,而其他一些程序实际上可能需要数据为空分隔。此外,您可以调整生成此空分隔字符串的程序,以根据不同的分隔符提供数据。阅读手册。

备注2:
只是为了记录,也可以使用sed删除空字符:sed 's/\x00/ /g' file
这也将空字符(十六进制代码00 = \ x00)转换为空格 Sed可以与-i开关结合使用以在适当的位置应用更改。

答案 1 :(得分:0)

我不确定你在脚本中做了什么。但是在下面的命令的帮助下,您可以从文件中删除“^ @”。

sed -i -e "s/\^\@//g" result.txt