今天在做日志处理的时候发现了这么一个问题:
有这么一段数据,test.log
2011-12-12 00:01:25
2011-12-12 00:03:25
2011-12-12 00:05:25
2011-12-12 00:07:26
2011-12-12 00:09:26
(结尾的$是通过vim里的 set list! 命令显示出来,表示的是一行结束)
当我通过一个for循环打印出这段数据的时候,问题出现了:
for x in `cat test.log`;do echo $x;done
我期望的数据输入是每行的内容都是“2011-12-12 00:09:26”这种格式,但是结果却是这样:
2011-12-12
00:01:25
2011-12-12
00:03:25
2011-12-12
00:05:25
2011-12-12
00:07:26
2011-12-12
00:09:26
空格被echo当成了换行输出,在vim输入set :list!,得到的结果没有异常:
2011-12-12 00:01:25$
2011-12-12 00:03:25$
2011-12-12 00:05:25$
2011-12-12 00:07:26$
2011-12-12 00:09:26$
(空格还是空格,$符号位一行的结尾)
具体原因待查,不过已经找到一个替代方法:
cat test.log | while read x;do echo $x;done
结果如下:
2011-12-12 00:01:25
2011-12-12 00:03:25
2011-12-12 00:05:25
2011-12-12 00:07:26
2011-12-12 00:09:26
------------------------------------分割线---------------------------------------------
参考了CU里的shell板块,问题可以这么解决:
IFS=$'\n';for i in $(<test.log);do echo $i:;done
shell手册里的解释:
$IFS
内部字段分隔符
此变量决定Bash如何分割字段,或是解释字符串时的字标识分割。
$IFS默认是空白字符(空格,制表符和新行符),它可以被重新设置。例如,在解释一个以逗号分割的数据文件里可设置成逗号分割。
IFS='\n'与 IFS=$'\n'是不一样的赋值:
IFS=$'\n'是指让bash按照ANSI C来解释$'string'中的string。
IFS为系统变量,对shell起作用,用于word splitting和read.
awk里试用自己的字段分隔符:FS定义。
blackold网友的一段代码说明了这个问题:
$ echo $0
bash
$ echo -En '\n'|xxd
0000000: 5c6e \n
$ (IFS='\n';for i in $(<urfile);do echo $i:;done)
:server1 ip1 password1
server2 ip2 password2
server3 ip3 password3:
$ echo -En $'\n'|xxd
0000000: 0a .
$ (IFS=$'\n';for i in $(<urfile);do echo $i:;done)
:server1 ip1 password1:
:server2 ip2 password2:
:server3 ip3 password3:
----EOF-------
分享到:
相关推荐
echo命令详解,最为详细的介绍 5. 输出空行,即相当于输入一...输出的回车,经DOS管道转向作为TIME命令的输入,即相当于在TIME命令执行后给出一个回车。所以执行时系统会在显示当前时间后,自动返回到DOS提示符状态:
比较详细的echo解析,最近学习时用到了
echo命令用法.txt
编写bat,添加path,直接命令执行,扩展Echo命令,以显示输出文本颜色 ECHOX.bat输出文本背景和文字颜色
echo命令详解,详细讲解echo用法。
dos批处理命令中的许多看书明白用法,然而实际用起来不知所措,本文就dos批处理echo命令详解,看了会恍然大悟。触类旁通在dos编程中发生质的突飞猛进。
centos linux上echo命令的一些基础的总结和其他一些解释
echo命令小解
Linux基础命令 的 PDF版本 1.时间相关命令 date;...2.echo命令 3.帮助命令 clear; wc; info cat 4.历史命令 history 5.产看根目录命令 cd;ll;ls 6.文件显示命令 cat; more;文件头部跟尾部的获取 head ;tail
touch a.txt 新建一个文本文件a.txt echo hello > a.txt 则a.txt中会记录下hello,但是如果再次执行echo hello > a.txt。则会覆盖之前的hello, 怎样追加呢?需要>>命令 echo world >> a.txt 则a.t
超详细的echo,大家学习啊...包含命令提示符和详细的工具...
前言 对于初学者来说,掌握一些基本命令的常用用法是必须的。本文列举了echo命令的几个常用用法并加以实例说明,以作回顾、参考。 基础 echo命令常用作打印输出字符串,根据echo帮助文件可以... • \b 删除前一个字符
Linux下echo命令详解[参考].pdf
linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法。下面通过本文给大家介绍linux echo命令以及linux echo命令提示权限不够的解决办法,感兴趣的...
Linux运维-3.Shell编程-11shell基础-100echo命令.avi
DOS界面下ECHO的详细用法 ECHO命令是的DOS批处理命令的一条子命令
exec命令用于调用并执行指定的命令。exec命令通常用在shell脚本程序中,可以调用其他的命令。如果在当前终端中使用命令...然后再使用exec命令调用echo命令输出同样的信息,并且对输出的信息进行对比: [root@linuxcool
1.Echo 命令 打开回显或关闭请求回显功能,或显示消息。如果没有任何参数,echo 命令将显示当前回显设置。 语法 echo [{on|off}] [message] Sample:echo off / echo hello world 在实际应用中我们会把这条命令和...