事情经过
最近没事闲得慌就到处找Linux命令敲,首先是自己在Windows上找了一个全英文的txt文件然后就稀里糊涂的把文件通过SecuCRT的rz把文件传到Linux终端了,然后用该文件练习grep命令就发生了悲剧
怀疑人生的时刻
首先是用grep做一些简单的文件过滤操作
[google@CentOS7 workspace]$ cat task.txt
I am RHCE teacher!
I teach linux.
test
I like badminton ball ,billiard ball and chinese chess!
my blog is http://www.tfantastic.com
our site is http://www.easthome.com
my qq num is 191868516.
not 191886888516.
[google@CentOS7 workspace]$ grep ^m task.txt
my blog is http://www.tfantastic.com
my qq num is 191868516.
[google@CentOS7 workspace]$ grep m$ task.txt
[google@CentOS7 workspace]$
咦~,怎么没有匹配成功啊?是不是自己的命令有问题于是百度,几轮下来发现命令没问题啊那怎么不显示啊,用一下这个试试
[google@CentOS7 workspace]$ grep [m]$ task.txt
[google@CentOS7 workspace]$
咦~,还是没有,是不是我电脑有问题?不还是先clear all试一下
[google@CentOS7 workspace]$ clear all
操作完只有还是不行,那就重启一下再试试,几分钟过去~~,开机了!再次输入命令,还是没有显示,TM是不是我的电脑不一样啊?打住停止猜想,看看这文件是不是有什么特别的
[google@CentOS7 workspace]$ file task.txt
task.txt: ASCII text, with CRLF line terminators
[google@CentOS7 workspace]$
with CRLF line terminators这是什么鬼,搜一下看看
原来Linux和Windows文本文件的行结束标志不同。在Linux中,文本文件用"/n"表示回车换行,而Windows用"/r/n"表示回车换行。怪不得我执行grep ^m task.txt
没问题,从后面过滤就没显示了
解决问题
dos2unix命令用来将DOS格式的文本文件转换成UNIX格式。win下的文本文件是以m 作 为 断 行 标 志 的 , 而 U n i x 下 的 文 本 文 件 是 以 作为断行标志的,而Unix下的文本文件是以 作为断行标志的,而Unix下的文本文件是以作为断行标志的。(可以使用cat -A 详细查询)
[google@CentOS7 workspace]$ dos2unix task.txt
dos2unix: converting file task.txt to Unix format ...
[google@CentOS7 workspace]$
输入grep 命令再看看
[google@CentOS7 workspace]$ grep m$ task.txt
my blog is http://www.tfantastic.com
our site is http://www.easthome.com
好了人生回到正轨,继续开始搬砖