您的位置:首页 > 运维架构 > Shell

shell学习笔记二--工具

2009-10-10 23:47 309 查看
中经常用到的一些程序(也称命令、工具)。当然,其中会参插很多前面讲过的。
Shell、grep、re等。Re脚本解决问题就越容易!re/sed/awk一、[/b]cut[/b]
其中,chars个字符截取出来;用逗号分隔的数值列表,如-c1,13,50和50到50把data如果不指定file命令用作管道线中的过滤器。我们再看who意思是截取行中的第1到行尾的字符(登陆时间)。
-d[/b]当数据文件或命令的输出不像who该文件的第一个冒号之前的字符都是系统用户名,我们想要截取这些用户名应该怎么办呢?因为每个名字的长度都可能不一样,所以-c,命令格式变为:
cut –ddchar –ffields file
表示要从文件file指定字符是一样的(所以要从/etc/passwd过滤器tr其中from-chars中,它就被转换成to-chars文件中的小写m先截取第1和6字段,然后tr将所有小写字母转换为大写。
-s[/b]选项用来压缩to-chars将m和W替换成一个字符,所以第二行的WWW带-s文件每行的多个空格压缩为一个,这里from-chars是同样的效果,而且和sed均不改变源文件(只是对文件的一个拷贝进行处理)
-d[/b]任何列在from-chars文件中的所有空格,结果写入标准输出(屏幕)。该命令和sed ‘s/ //g’。

每个文件中符合模式pattern文件为例:
$cat /etc/passwd
mysql:x:501:501::/home/mysql:/bin/bash
www:x:48:48::/home/www:/bin/bash
ldap:x:55:55:LDAP User:/var/lib/ldap:/bin/false
test:x:502:502::/home/test:/bin/bash
stu1:x:503:503::/home/stu1:/bin/bash
$grep www /etc/passwd
www:x:48:48::/home/www:/bin/bash
$
。如果在给定的文件中没有符合该迷失的字符串,grep的内容如下:
$cat data
www in data
tom in data
jerry in data
$
两个文件中搜索www的行外,还显示了他们所在的文件名。
(www的介绍不在本文给出,请参考其他文章。
-v[/b]处理这个问题很容易:用-v的行:
$grep –v www /etc/passwd
mysql:x:501:501::/home/mysql:/bin/bash
ldap:x:55:55:LDAP User:/var/lib/ldap:/bin/false
test:x:502:502::/home/test:/bin/bash
stu1:x:503:503::/home/stu1:/bin/bash
选项[/b]
中没有包含www很方便的把每个文件显示为一行,我们可以在命令后面通过管道把输出输送给wc –l如果grep:www:x:48:48::/home/www:/bin/bash
的第2用于对指定的文件中的行进行排序,其基本格式为:
sort file(s)
有许多选项,可以让排序操作非常灵活。下面我们只介绍其中一部分选项。
-u[/b]命令,在输出结果中去除重复的行:
$sort names
Fred
Lucy
Tony
Tony
$sort –u names
Fred
Lucy
Tony
$
选项[/b]
选项[/b]
另一种方法是用-o该命令把对文件names不能成功,它将以破坏文件而告终。然而,采用-o确实蛮好的。
-n[/b]编码的顺序来进行排序的,如果要按照数学方式来排序,该怎么做呢?看下面的例子:
$cat data
1 11 www
-3 13 jerry
2 12 tom
$sort data
1 11 www
2 12 tom
-3 13 jerry
$sort –n data
-3 13 jerry
1 11 www
2 12 tom
跳过字段[/b]
代表跳过第一字段。注意,不是所有的sort版本有关。
$sort +1n data
sort: open failed: +1n: No such file or directory
如果想要以冒号作为分隔符,按照第三列数字(用户id错了,因为跳过字段时,sort参数,改变sort四、uniq[/b]
该格式中,uniq,处理过程中,去掉重复的行。uniq,结果就写入标准输出;如果in_file如何工作。
$cat names
Lucy
Tony
Fred
Tony
$
来删除这种重复的行:
$uniq names
Lucy
Tony
Fred
Tony
$
没有用吗?对了,前面说了,uniq分开了,uniq就连续了,这次uniq命令,完成的就是这个功能)
-d[/b]的-d(或标准输出),不管他们在文件中连续出现多少次,这样的连续行只写一次。
$sort names | uniq -d
Tony
找到重复的连续行,然后只显示一行。下面的命令可以用来检查系统中是否有相同的帐户:
$sort /etc/passwd | uniq –d
$
文件的第一字段来进行操作:
$sort /etc/passwd | cut –d: -f1 | uniq –d
harry
tom
$
和2选项[/b]
删除重复行的同时,显示每行出现的次数。
$sort names | uniq -c
1 Fred
1 Lucy
2 Tony
$

、grep的用法。re在笔者以下几篇文章中分别加以讨论:
http://licong.blog.51cto.com/542131/200431学习笔记》
http://licong.blog.51cto.com/542131/204226高级命令》
http://licong.blog.51cto.com/542131/151976再重复一次,以上工具掌握得越灵活,编写shell
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  职场 shell 休闲