shell的过滤器:
行操作:more, less, head, tail, cat,uniq
列操作:cut, paste
比较:comm, cmp, diff
排序:sort
转换:tr
统计:wc
以及grep, awk, sed
cat 将多个文件连结输出到标准输出
-n 输出行编号
head -N 输出头几行
tail +N 跳过N-1行
-N 由下向上几行
(-r选项在REDHAT里不被支持)
cut -c[range]
-f[range]
-d[delimiter]
-s 不显示没有分隔符的行
range可以是1,2..., 或者1-3的形式
paste -d[delimiters]
sort
(Linux中0 < a < A, 而不是ASCII顺序)
+n1 -n2根据跳过n1个字段,到第几个字段来排序
-t[delimiter]
-n 根据数字排序
-m 合并排序文件
-u 当排序的字段相同的时候,只保留最后一个
-b 忽略前导空格
-d 字典排序,特殊字符会比其他的小
-r 逆向排序
多途径排序:可以将nr等放在其中一个range的n1后
tr -d 删除字符
-c 求余(不符合的转换)
-s 转换后,删除重复的字符
uniq 删除的是相邻的重复行
-u 非重复行才输出
-d 重复行才输出
-c 重复行计数
-f n 跳过前几个字段
-s n 跳过前几个字符
wc -c 统计字符
-w 统计单词
-l 统计行
cmp 比较的是字节,默认在第一个不同时停止
—l 列出所有不同
-s 抑制输出(可以查询状态)
diff
comm
grep -clinsvxf
c:只输出行编号
l: 列出至少符合一行的文件列表
i: 忽略大小写
n: 输出标号
s: 静模式
v: 逆选择
x: 完全匹配
f:要符合的字符串在文件中
sed指令格式:
地址[!]指令
地址分为:单行地址,行集合地址,行范围,嵌套地址
指令分为:修行文分替转保退输
修:修改, i, a, c, d, D
行:行编号 =
文:文件 r, w
分:分支 b, t
替:替换 s, 标志:g, num, p
转:转换 y
保:保存空间 h, H, g, G, x
退:退出 quit
输:输入输出 p, P, n, N
如果要使用保存空间,记住:
n的时候如果模式空间为空(使用d),那么不能正常工作。
H的时候如果保留空间为空,那么不能正常工作。
模式空间里的行被链接为一行来使用。使用s替代。
使用保存空间,应该是结合一个范围地址比较方便,将要修改的行放在保存空间里,遇到最后一行的时候交换,然后G回来,再使用s替代。
sed是具备自动处理的程序。
awk是具备基本编程要素的程序。
shell是一门编程语言。
awk:
BEGIN{
}
{
模式{动作}
}
END{
}
注意:主题的{}是必须的。
BEGIN是读入文件前的动作。END是处理完所有记录的动作。
模式分为简单模式和范围模式。
简单模式分为表达式和无模式。
表达式模式分为正则表达式和C语言表达式(算术,逻辑,关系)
无模式表示所有记录都匹配
范围模式:begin-pattern, end-pattern
动作相当于C语言里的语句。可以是单语句,组合语句(用;),块语句。
格式化打印:print, printf, str=sprintf
控制流: if(expression)
{
}
else
{
}
while(expression)
{
}
for(...;...;...)
{
}
do...while()
记录的输入控制:next, getline, exit
next, 回到主题开头执行下一条记录
getline可以读入参数,并且返回值
返回值:1,读记录成功;0, 文件结尾;-1, 读错误
getline v < file
可以重定向为file, 如果不指定变量v,则默认为$0
将继续执行而不是回到主体开始
exit code
可以控制awk退出时的参数,这样可以和shell等客户通信
awk数组,或者说是字典更为恰当。使用字符串作为index, 当创建数组时,用[]指出。
遍历数组:for item in array
测试数组:if(item in array)
删除数组:delete array[index]
函数:
字符串函数
length
index
substr
split
sub
gsub
match和RSTART和RLENGTH相关。
toupper
tolower
...
数学函数
随即函数
三角函数
...
用户定义函数:
function name(parameter list)
{
code
}
不需要在使用前定义
系统命令
1.使用管道:
"date"|getline
2.使用系统函数:
if(system("cp sysCopy.dat sysCopy.bak") != 0)
用户定义函数
awk将文件视为记录和字段。
特殊的变量:
$0 记录
$1, $2...字段
FS 字段分隔符
NS 记录分隔符
OFS 输出的字段分隔符
ONS 输出的记录分割符
NF 当前记录号
NS 当前字段号
FILENAME 当前文件名
ARGC 参数数量
ARGV 参数数组,第0个元素是awk,其他为文件名
RLENGTH
RSTART
shell
命令替代:`...`, $(...)
垃圾文件:/dev/null
变量: 存储文件名(注意shell在展开的时候匹配符才展开)
存储文件内容
存储命令
只读变量
变量属性typeset
输入输出 print, echo, read
eval命令
表达式:
数学表达式
关系表达式
文件表达式
fdl rwx s nt ot
逻辑表达式
flow:
if-then-else
while
for in
后台循环
循环重定向
循环管道
调试脚步
在脚本中, set -o verbose
在命令行, -o xtrace
变量求值和替代
字符串处理
此处文档
函数
数组
信号
shell脚本里的内置命令是以exec的方式执行的,也就是说,它会另开一个进程。
#/!/usr/bin/bash
trap "echo 'You hit control-C!';exit" INT
while true
do
sleep 1
done
|
那么如果你发送一个INT信号给sleep的进程,即使sleep进程被终止了,也会回到循环。
应该发送给执行这个脚本的bash。
阅读(702) | 评论(0) | 转发(0) |