在第一行指定程序解析器,如:
- #! /bin/csh -f
- #! /bin/csh - 表示没有选项,避免欺骗攻击
此行要求:
- 最好不要超过64个字符
- 别在选项后面放置任何空白
- 使用完整路径
perl
python
ruby
字符 | 功能 | grep | egrep | sed | awk |
* | 匹配0或多个字符 | Y | Y | Y | Y |
. | 任意一个字符 | Y | Y | Y(不包括换行符) | Y |
^ | 指明以 ^后字符串 开头的行 | Y | Y | Y | Y |
$ | 指明以 $前字符串 结尾的行 | Y | Y | Y | Y |
[] | 任意字符 | Y | Y | Y | Y |
[^] | 除中括号之外的字符 | Y | Y | Y | Y |
\ | 解除特殊意义 | Y | Y | Y | Y |
\> | 到一个字的最后面 | Y | Y | Y | Y |
\< | 到一个字的最前面 | Y | Y | Y | Y |
\(…\) | 将匹配的字记录起来,最多9个,使用\1到\9来访问 | Y | Y | Y | Y |
x\{m\} | 讲字符x重复m次 | Y | Y | Y | Y |
x\{m,\} | 重复至少m次 | Y | Y | Y | Y |
x\{m,n\} | 重复至少m次,且不大于n次 | Y | Y | Y | Y |
+ | 匹配一个或多个前置字符 | N | Y | N | Y |
? | 0个或1个前置字符 | N | Y | N | Y |
a | b | 匹配a或b | N | Y | N | Y |
() | 组合 | N | Y | N | Y |
& | 保持查找到的字符串 | N | N | Y | Y |
~ !~ | 模糊匹配 | N | N | N | Y |
shell
分bourne shell(AT&T shell,即linux下的bash),C shell(Berkeley shell,即linux下的TCSH),korn shell(bash的超集合)
ctrl + D 文件结尾
echo
-n 不打印最后的回车换行符
printf
有的unix版本支持
tr 转换字符
-d 'x' 删除字符x
-s 浓缩字符,合并相同字符
/dev/tty
/dev/null
参数
大于9,使用如${11}方式
set -x 打开跟踪功能;或者执行shell是加-x开关;
set +x 关闭跟踪功能
locale ?
grep:
- egrep,扩展了grep,支持较多的RE特殊字符(regular expression)相当于grep -E。
- fgrep,又叫fast grep或fixed grep,特殊字符只代表自己!相当于grep -F。
- grep wordpattern filename1 filename2 ...
- 找到了,返回0;没找到pattern,返回1;没找到file,返回2。
- -n 打印行号
- -c 匹配行的数量,一行内多次匹配只算一行
- -i 忽略大小写
- -l 只显示文件名
- -h 不显示文件名
- -v 倒序查找只显示不匹配的行
- -w 只是单词
- -A num 打印匹配位置之后指定行内的数据
- -B num 打印匹配位置之前指定行内的数据
- -C num 以匹配位置为中心,打印指定行上下内的数据
- -m num 匹配的个数,只打印这些个
- -r 递归
如 grep maxNum -r -n -i -C 5 ./
sed:
- sed ‘command’ filename
- 不修改原文件
- 如果多个命令,可以用大括号将命令括起来,命令间用分号分割;如sed '{n;q;}' filename
- -n 只显示匹配的行,默认的其他打印不再显示。(跳过预设的输出)
- -e 多个编辑动作
- -f 文件名
- -v 查版本
- command保护匹配和命令,其中命令分:
- a\ 附加
- c
- d 删除
- i 插入
- h 复制到缓存器
- H 附加到缓存器
- g 从缓存器取出复制到样式空间,覆盖原有内容
- G 从缓存器取出复制到样式空间,附加到原有内容
- l 列出非打印字符
- p 打印
- n 下一行
- q 退出sed
- r 读一个文件
- ! 取反
- w 写出到一个文件
- x 交换缓冲区和样式空间的内容
- y 转换一个字符到另一个字符
- s 替换动作,后接g做全局替换;接p打印;可以接各种字符,如#分割,平常使用/,但有时候会有日期使用/,此时使用#。
awk:
- 分awk,nawk,gawk几个版本
- awk 'pattern {action}' filename或者管道导入替代filename
- -f 文件名
- -F 定义分隔符,可以有多个,如-F'[ \t]'
- -v var=val
- action 包括:
- print 直接接变量,如{print $1};
- printf 带格式变量,如{printf “%15d", $1}
- $0,全行
- NR,行个数
- FNR,文件所拥有记录数
- NF,域个数
- OFMT,数字的输出格式
- FS,输入域分隔符,预设值为空格
- OFS,输出域分隔符
- ORS,输出记录分隔符 如{OFS=":";ORS="\n\n";}
- RS,输入记录分隔符 ?
- BEGIN
- END
- 输出转向>和>>
- 输入转向getline,从标准输入,管道,或文件输入。
- 对于字符的双引号是必须的,否则被识别为变量