首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

shell编程学习笔记(二)

作者:  时间: 2011-01-27

shell只是一个程序,它在系统中没有特权。因此,有多个不同风格shell共同存在原因——Bourne Shell,Korn Shell,C Shell。 

在shell输入命令,先分析用户键入的每个命令,然后为执行程序作初始化。

Shell有自己的内部程序设计语言,这种语言是解释型的,shell用这种语言解释命令行的每一条语句,然后执行。

C等编译型语言,一般是先编译成可执行文件再执行。

1)正规表达式

. 匹配任意字符

ed files, ed 编辑命令

^contents 匹配行首符号

contents$ 匹配文件尾

[...] 匹配[]内的字符之一

* 配额0个或多个任意字符

\{...\}:x\{...\}匹配精确数目的字符串

\(...\): 保存匹配的字符串

2)cut

cut -cN file

cut -dchar -fN file

    char是分割符 

   N 从第1 个开始数的第N 个字节、字符或域

     N- 从第N 个开始到所在行结束的所有字符、字节或域
     N-M 从第N 个开始到第M 个之间(包括第M 个)的所有字符、字节或域
     -M 从第1 个开始到第M 个之间(包括第M 个)的所有字符、字节或域

3)paste命令

paste file1 file2 file3 ,将三个文件的内容连接起来,直接在对应的每一行后连接而不是在第一个文件末尾连接

paste -d‘char’ file1,file2

       -d是 可选参数,文件连接的时候的默认分隔符是制表符,我们可以用-d来设定我们想要的字符,其中char的单引号最好是有,没大部分情况也是行的。

paste -d'char' -s file,-s告诉paste把同一个文件file的行用char连在一起

4)sed 用来编辑数据的程序,指的是流编辑器,与ed的区别是其不能用于交互

 sed 's/char1/char2/d' file,将file里面的每一个char1替换成char2,只有s的话只会将每行的第一个char2替换,加上g会将所有的char2替换

 sed -n '1,2p' file,选项-n表示没有显式要求的话不显示任意一行,显式指定用p命令来实现,该命令表示输出file的1-2行

 sed -n '/char/p' file,显示包含单词char的行

 sed ‘1,2d’file,删除file文件的1-2行

5)tr 过滤器tr用于转换来自标准输入的字符

 tr from-chars to-chars,from-chars 和to-chars都是一个或多个字符,输入的任意在from-chars的字符转换成to-chars中的字符

 tr a b < file, 将file中的a全部转成b

 tr '[a-z]' '[A-Z]' < file, 小写都换成大写

 tr -s ':' ' ' < file,假设有连续的多个:,假如没有-s,那么出来的结果将会是压缩成一个' '。

 tr -d ':' < file ,删除输入流中的:

6)grep 可以搜索一个或多个文件中特定的字符串模式

 grep char files

 grep -v char file 显示不包含char的行

 grep -l char * ,显示包含char的文件名

 grep -n char file, 显示行号

7)sort  对输入文件的每一行排序,默认升序

 -u 去掉重复行

 -r 降序排列

 -o,输出重定向,跟>很像,区别在于-o可以重定向为同一个文件,而>不行

 -n,按算术方法排序

8)uniq 查找并消除连续重复行

 uniq file1

 uniq file1 file2

 uniq file -d,输出连续重复的行

 uniq file -c,输出每行出现的次数