我正在尝试重定向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”但没有改变
答案 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