基础正则表达式
grep “a*” passwd
grep “aa*” passwd 最少包含一个字符,(一个字符也可以匹配,但是两个字符也是匹配一个字符,三个匹配两个)
1.2
“^” 匹配行首 “ $”匹配行尾
grep "n $ " passwd (结尾是n的行)
空白行grep -n “^ $” 1.txt
1.3
"[]"匹配中括号中指定的任意的字符,且只能匹配一个字符
grep “s[a-z]in” passwd
grep “[0-9]” passwd
grep “^ [a-z]” 1.txt(以小写字母开头的行)
1.4
“[^]”匹配除中括号的字符以外的任意字符
grep “^ [ ^a-z]” 1.txt
1.5转义字符
grep “.$” /etc/passwd
匹配使用“.”结尾的行
grep “a{2}” 1.txt
匹配包含连续两个或多个数字的字符串
grep “[0-9]{3}” 1.txt
匹配包含连续的三个数字的字符串
“{n,}”表示其前面的字符出现不小于n次
grep “^ [0-9]{3,}[a-z]” 1.txt
“{n,m}”匹配其前面的字符至少出现n次,最多出现m次
grep “sb{1,3}i” /tmp/passwd
匹配再字母s和字母i之间有最少一个b,最多三个b
2字符截取命令
2.1cut字段提取命令
选项:-f : 列号 提取第几列
-d 分隔符:按照指定分隔符分割列(分隔符这里加不加双引号都可以)
cut -f 2 -d: /tmp/passwd
(必须要指定分隔符,不然机会变成提取整篇了)
cut -f 3,5 -d: /tmp/passwd
(还可以提取多列)
2.2printf命令
printf ‘%s’ $(cat 1.txt)
不调整输出格式
printf ‘%s\t %s\t%s\t\n’ $(cat 1.txt)
调整格式输出
2.3awk命令
截取文档中的某个段
head -n2 /tmp/passwd |awk -F ‘:’ ‘{printf $0"\n"}’ (-F是指定分隔符,print的动作要用{}括起来,,不然会报错)
2.匹配字符或字符串
awk ‘/roo/’ /tmp/passwd
和sed类似,不过还有更强大的匹配功能
awk -F ‘:’ ‘$1~/oo/’ /tmp/passwd
(这里的~就是匹配的意思)
awk -F ‘:’ ‘/root/ {printf $1,3} /bash/ {printf $1,3}’ /tmp/passwd
条件操作符
awk -F ‘:’ ‘$3==“0”’ /tmp/passwd
awk -F’:’ ‘$7!="/sbin/nologin"’ /tmp/passwd(!=为不匹配)
awk -F’:’ ‘$3<$4’ /tmp/passwd
awk -F’:’ ‘$3>$4’ /tmp/passwd
另外还可以使用 && 和 || 表示“并且” 和“或者” 的意思
awk -F’:’ ‘$3>“5”&& $3<“7”’ /tmp/passwd
也可以是或者
awk -F’:’ ‘$3>“5”|| $7=="/bin/bash"’ /tmp/passwd
4.awk的内置变量
awk常用的变量
NF:用分隔符分隔后一共有多少段
NR:行数
$NF是最后一段的值;
NR则是行号
可以使用行号作为判断条件,也可以配合匹配一起使用:
5.awk中的数学运算
段值更改:
awk还可以对各个段的值进行数学运算:
3sed命令
3.1打印某行(想把所有行都打印出来可以使用 sed -n '1,$'p 文件绝对路径)
3.2打印包含某个字符串的行
grep中使用的特殊字符,如 ^ $ . * 等同样也能在sed中使用
-e可以实现多个行为
3.3删除某行或多行(d是删除动作)但不修改文件
3.4替换字符或字符串
3.4.1
#号也可以当作分隔符
3.4.2删除文档中的所有数字或者字母
3.5调换两个字符串的位置
再某行后追加‘字符’
再某行插入两行数据
替换字符串
sed ‘3s///g’ 文件名
-i 直接写入文件
-e同时(替换为空)
4.条件判断
3.1按照文件类型判断
两种判断格式
3.2按照文件权限判断
3.3两个文件之间的比较
例:创建硬连接
test比较
3.4整数进行比较
例:
3.5字符串的判断
例1:
例2:
3.6多重条件判断
例:
5.流程控制if条件语句
5.1单分支 if 条件语句
单分支条件语句需要注意几个点: if 语句使用 fi 结尾,和一般语言使用大括号结尾不同
例:写一个检测内存运行的脚本
5.2双分支
例2(shell脚本)备份数据库
5.3case语句
case 语句和 if…elif…else 语句一样都是多分支条件语句,不过和 if 多分支条件语句不同的是,case 语句只能判断一种条件关系,而 if 语句可以判断多种条件关系。
例:
5.4For循环
例一(打印时间)
例2批量解压缩脚本
例题1
从1加到100
例2:(这里不要粗心大意,不能少少任何标点符号,不然会报错)
5.5while
示例(1加到100)
5.6until循环
until 循环,和 while 循环相反,until 循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。
示例(1加到100)