shell编程学习笔记(二)
时间:2011-01-27 来源:gzpk
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,输出每行出现的次数