1. 正则表达式:基本正则表达式与扩展正则表达式
元字符:用于做通配的
grep :全面搜索正则表达式并打印之
grep 基本正则表达式,不支持扩展表达式
grep -E 支持扩展正则表达式
egrep 与 grep -E 相同
fgrep=gerp -F 不支持正则表达式
grep -v 反向选取,被grep匹配到的不显示,不匹配的显示
grep -i 忽略大小写
grep -A 显示上下文
grep --color=auto(auto自动加颜色) 'root' /etc/passwd 搜索/etc/passwd下的root,并高亮显示
export GRER_COLOR='01;32' 颜色定制
ls /etc | grep --color=auto 'pass' 搜索带有pass的字符串并高亮显示
2 .1) . :任意单个字符 如: grep 'r..t' /etc/passwd
* :表示匹配它前面一个字母任意次(注意与globbing文件名通配不一样)
? : 匹配零次或一次 a?root (有a无a均可以)
+ :匹配一到任意次
|: 或者 如 : like your lover ,love your lover 可以表示为: l(ik)|(ov)e your lover (出现ik或者ov)
.* :匹配任意长度的任意字符 如:r.*t :rt,rrt,rrrt 均可匹配
2)r\{n\} 次数 精确匹配 : a\{2\}root 匹配a两次: aaaroot
r\{m,n\} 次数范围匹配 : a\{0,2\}root 匹配a零到二次:aroot aaroot aaaroot
r\{n,\} 次数至少匹配 : a\{2,\}root 匹配a至少两次
3)锚定符:
^root root必须出现在行首
root$ root必须出现在行尾
[ ]指定选择字符的范围,匹配任意单个字符 如: [abc]root abc至少出现一个 aaroot也匹配(只匹配aroot这一段)
[^abc]root 除了abc以外的任一个后面跟root
锚定单词:
\< 词首定位符 \<root root必须出现在词首 root1匹配,aroot不匹配
\> 词尾定位符 root\> root必须出现在词尾 root1不匹配,aroot匹配
\<root\> 精确匹配root这个单词
\broot 词首匹配
root\b 词尾匹配
\broot\b精确匹配root这个单词
\Broot\B 不匹配
\(..\) 字符串次数匹配
love your lover : \(love\).*\1r 以love开始lover结束,中间跟任意字符(\1引用括号内内容)
like your liker,love your lover \(like\).*\1r.*\(love\).*\2r
\(root\).*\1 \1表示引用第一个括号内容
3.cut:切割命令
l(ov){1,3}er 匹配ov一次到三次
cut -d: -f1 /etc/passwd 每行的以:分割的第一段,切割/etc/passwd目录下的第一段,即显示用户名那一段
cut -d: -f1 /etc/passwd |grep "\<student\>" 先切割再进行搜索,最后显示student用户
cut -d' '-f2 每行以空格分割的第二行
egrep 'r.{2}'t /etc/passwd 匹配两次中间出现两个字符即可
4.wc : 统计
-l 统计行
-w 统计单词
-c 字节(字符)
ls -l /etc |grep -v "total"|wc -l 统计etc下有多少命令
5.sort 排序不影响原文件
sort常见参数
-o :把结果保存在某个文件中
-r (reverse):逆序显示
-n :以数值大小排序
-f :忽略大小写
-u :排序结束去掉重复行
-t : -k 默认以空格分割 ,-k 表比较第几段
如:sort -n(数值比较) -t : -k 3 /etc/passwd 第三段以数值排列
6.uniq 去掉紧挨着重复的行 sort a.txt |uniq 先排序在去除重复行
uniq -c 显示重复的次数
实例:sort 文件 | uniq -c
-u 只显示不重复的行
-d 显示重复的行
cut -d: -f7 /etc/passwd |sort |grep -V "^$"(去除空白行)|uniq 切割/etc/passwd目录下的第七段,进行排序,然后去除空白行,
7.条件判断:
1)三种表达方式;
test expression 或者 [ expression ] 或者[[ expression ]]
test expression : test 1 -gt 2
[ expression ] : [ 1 -gt 2 ] 注意两端空格
[[ expression ]] : [[ 1 -gt 2 ]]
2)链接条件的:
-a 与
-o 或
! 非,取反
如:A=2,B=4,C=5 [ $B -gt $A -a $B -gt $C ] 4大于2并且4大于5 结果为1
[ $B -gt $A -o $B -gt $C ] 4大于2或者4大于5 结果为0
[ ! $B -gt $A ]
3)短路操作符,连接命令的:
条件测试,测试对象对象必须为完整的语句
&& [ $B -gt $A ] && [ $B -gt $C ] 前面为假,结果一定为假,不需要在判断后面的
|| [ $B -gt $A ] || [ $B -gt $C ] 前面为真,结果一定为真
如:[ 2 -gt 3 ] && echo "2 is max" 前面为假,结果一定为假,不再执行后面的echo语句
[ 2 -gt 3 ] && echo "3 is max" 前面为假,继续执行后面的echo语句
cut -d: -f1 /etc/passwd |grep "^student$" && echo "student exist" 如果student存在执行echo语句,否则不执行
cut -d: -f1 /etc/passwd |grep "^student$" && echo "student exist" ||echo "student not exist" 如果student不存在,执行echo “student notexist”
比较两个数的大小,显示最大数
#!/bin/bash
[ $1 -gt $2 ] && echo "$1 is the MAX" || echo "$2 is the MAX"
./a.sh 1 2
4)条件测试:
整数测试
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
-eq 等于
-ne 不等于
> >= 不能在[ ]中用,但能在(())中应用 如(($A > $B))
5)字符串测试
=
!=
>
<
-z 一个字符串长度为0,即空,空为真
-n 空为假,不空为真
6)文件测试
-e 存在
-f 是否为普通文件
-d 是否为目录
-r 读
-w 写
-x 执行
-L/-h FILE : 测试一个文件是否为符号链接文件
—O FILE : 测试文件属主是否是脚本执行者
-G FILE 属组是否为你所属的组
如:判断tmp目录下不存在一个文件a
[ ! -e /tmp/a ]
判断tmp目录下不存在一个目录dir,且dir文件也不存在,创建dir这个目录
[ !-e /tmp/dir ] && mkdir /tmp/dir
8.比较两个文件的不同:
diff/patch:
diff:生成补丁的工具
patch:补补丁的工具
diff vimrc vimrc2 > vimrc.pacth 比较不同,把结果生成补丁
9.aspell check file :检查单词
look 查词库
look head 查询所有以head开头的
10.sed (stream edit)非交互式编辑器,行编辑器,逐行处理
sed '/root/p' /etc/passwd 搜索/etc/passwd下的包含root的字符串并显示
sed '/root/p' /etc/passwd |uniq -d 只显示重复行
sed -n '/root/p' /etc/passwd 只显示匹配到的行
sed '/root/d' /etc/passwd 删除
sed 's/root/ROOT/' /etc/passwd 搜索root,替换为ROOT (默认替换每行第一个)
sed 's/root/ROOT/g' /etc/passwd 替换每行的所有root
sed '1,5s/root/ROOT/g' /etc/passwd 指定1-5行
sed '10,$s/root/ROOT/g' /etc/passwd 指定10到最后一行
sed '/root/,/student/s/root/ROOT/g' /etc/passwd 第一个出现root行到第一次出现student的行
选项-i 直接编辑源文件
sed -i 's/root/ROOT/g' /etc/passwd (g全局,i忽略大小写;g与i用法一样)
追加:
i:行之前加入一行 #sed 's/root/i\enable =0' /etc/passwd
a:行之后加入一行 #sed 's/root/a\enable =0' /etc/passwd
加入多行,用换行符\n #sed 's/root/a\A =2\n B=3' /etc/passwd
选项:
-e 指定多个操作
sed -e 's/root/ROOT/g' -e 's/student/STUDENT/g' /etc/passwd
-f 从文件中读取条件
sed -f a.txt /etc/passwd