在学习了shell脚本的基本语法,命令,符号之后,接下来要看的就是shell脚本使用的所有工具了。
在shell脚本中,工具的使用简化了所要编写的代码。接下来就介绍几个shell下经常使用的工具。
1、sort
sort工具的常用语法就是将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,默认是升序。
sort工具常用的一些选项:
2、uniq
uniq工具作用效果是为消除相邻的重复行,如果重复行不再相邻的位置,就不会消除,因此,uniq工具一般与sort工具联合使用。
uniq工具常用的一些选项:
uniq工具的应用:求两个文件的交集、并集、补集。
3、paste
paste单词的字面意思是粘贴。该命令主要用来将多个文件的内容合并。paste工具按行将不同文件行信息放在一行。缺省情况下, paste连接时,用空格或tab键分隔新行中不同文本。
通常我们把一行称为一条文本记录,每一行有多少列由列分隔符决定;按照列分隔符可以将一行分为多个域;进行行列划分时,应该考虑两个因素:行分隔符和列分隔符;行分隔符一般有\n,列分隔符为空格,tab
paste工具的常用选项:
4、cut
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。 如果不指定 File 参数,
cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
对于英文字符-c和-b差别不大,但对于汉字类的字符差别就出来了
用-c则会以字符为单位,输出正常;而-b只会以字节(8位二进制位)来计算,输出就是乱码。这里的字符,不是我们C当中的占有一个字节的字符!可以简单理解成,汉字是由多个字节组成的多字节字符!5、xargs(***)
xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。
xargs工具的使用:
将格式化的字符串作为命令行参数传递给其他命令,组装完成批量任务。
xargs的一个选项-I,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次.
Ls / |xargs -I {} touch {}.log 创建ls下的所有文件并且以.log结尾
-print0 :不再按照空格等字符作为文件名结束标志,而变成以NULL结尾。
-0:告诉xargs,给xargs传参的字符不以空格为结束标志
6、grep
grep工具的常用选项:
7、sed(*****)
sed是一种流编辑器,它是文本处理中功能很强大的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。
简单来说,sed就是一个按行处理文件的文本编辑器。对每一行先进行正则匹配,再进行相应的处理,匹配失败就不用进行处理。
sed默认按照Basic规范基本匹配!(1)sed工具的命令格式
(2)基本使用
在使用p命令需要注意,sed是把待处理文件的内容连同处理结果一起输出到标准输出的,因此p命令表示除了把文件内容打印出来之外还额外打印一遍匹配pattern的行 ,要想只输出处理结果,应加上-n选项,这种用法相当于grep命令。
sed命令不会修改原文件,删除命令只表示某些行不打印输出,而不是从原文件中删去。 如果要影响源文件,需要使用-i 选项。
同样是替换,带g或者不带g有什么区别?
已匹配字符串标记&,可以表示匹配pattern1之后的所有字符。子串匹配标记\1,\2...\n
\(..\) 用于匹配子串,对于匹配到的第一个子串就标记为\1,依此类推匹配到的第二个结果就是\2,我们通过对标签进行重组,从而完成数据逆置。
sed不像grep一样,不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0。
Sed 不能用if判断,而grep可以使用if判断退出码。
8、模式空间/保持空间
sed在正常情况下,将处理的行读入模式空间(pattern space),脚本中的“sed-command(sed命令)”就一条接着一条进行处理,直到脚本执行完毕。然后该行被输出,模式(pattern space)被清空;接着,在重复执行刚才的动作,文件中的新的一行被读入,直到文件处理完毕。 一般情况下,数据的处理只使用模式空间(patternspace),按照如上的逻辑即可完成主要任务。但是某些时候,使用通过使用保持空间(hold space),还可以带来意想不到的效果。
模式空间:可以想成工程里面的流水线,数据直接在它上面进行处理。
保持空间:可以想象成仓库,我们在进行数据处理的时候,作为数据的暂存区域。(只能存储数据,而不能对数据进行处理和修改)
正常情况下,如果不显示使用某些高级命令,保持空间不会使用到!
sed高级命令
测试用例:
1>给每行结尾添加一行空行
2>用sed模拟出tac的功能(倒序输出)
3>追加匹配行到文件尾
4>行列转化
5>打印奇数行/偶数行
6>求1~100的求和
9、awk(*****)
sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义,比如/etc/passwd文件的每一行有若干个字段,字段之间以:分隔,就可以重新定义awk的列分隔符为:并以列为单位处理这个文件。
行分隔符:记录分隔符
列分隔符:域分隔符
awk实际上是一门很复杂的脚本语言,还有像C语言一样的分支和循环结构,但是基本用法和sed类似,awk命令行的基本形式为:
awk option 'script' file1 file2 ... awk option -f scriptfile file1 file2 ...
和sed一样,awk处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,编辑命令可以直接当命令行参数传入,也可以用-f参数指定一个脚本文件,编辑
命令的格式为:
和sed类似,pattern是正则表达式,actions是一系列操作。awk程序一行一行读出待处理文件,如果某一行与pattern匹配,或者满足condition条件,则执行相应的actions,如果一条awk命令只 有actions部分,则actions作用于待处理文件的每一行。
其实,awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。
awk定制输入输出分隔符
awk默认按照空格作为分隔符,如果想定制分隔符,常用的方法是使用-F 选项
echo "hello:world" | awk -F: '{print $1}' hello 以:为分隔符
-F 可以支持多种符号进行定制分隔符
测试用例:
BEGIN&END
BEGIN和END,是awk中两个极具特色的表达式,可以用他们做文本处理之前的准备工作,之后的收尾工具,极具实用价值,
基本格式如下:
10、awk脚本
awk出了上面的基本命令行的使用方式之外,还有awk脚本方式,不过基本写法与命令行相同,语法也是基本类C。
通过awk脚本,统计产品的档次,85分以上,优。75~85,良。60~75,中。60分以下,差 awk内置变量
11、find
find命令在目录结构中搜索文件,并执行指定的操作。
find pathname -options [-print -exec -ok ...] 用于在文件树种查找文件,并作出相应的处理(可能访问磁盘)。
find工具的常见选项:
Touch一个已经存在的文件,目录不会做修改,而touch一个新的文件,相当于更新了目录。
12、free
free 查看内存信息
-m 以MB为单位查看内存, -k以KB为单位