一.grep命令
1.grep命令
全面搜索研究正则表达式并显示出来,强大的文本搜索工具,根据用户指定的“模式”对目标文本进行匹配检查,打印匹配到的行,由正则表达式或者字符及基本文本字符所编写的过滤条件
2.grep的使用参数
grep 匹配条件 处理文件
grep
-i ##忽略字母大小写
-v ##条件取反
-c ##统计匹配行数
-q ##静默,无任何输出
-n ##显示匹配结果所在的行号
例:
grep root /etc/passwd
grep ^root /etc/passwd 以root开头的句子
grep root$ /etc/passwd 以root结尾的句子
grep -i root /mnt/passwd 筛选root不区分大小写
grep -E "^root|root$" /mnt/passwd 因为有|,所以需要扩展 等同于 egrep "^root|root$" /mnt/passwd
grep -v ^root /mnt/passwd 不以root开头的句子
grep '172.25.254.250' /etc/hosts && echo 'YES' || echo 'NO' ##过滤含有172.25.254.254的行
grep -q '172.25.254.250' /etc/hosts && echo 'YES' || echo 'NO' ##过滤含有172.25.254.254的行,但无任何输出
3.正则表达式:对于特殊字符需要转义\,并且加上双引号
^westos :以westos开头
westos$:以westos结尾
w…s :以w开头,以s结尾,中间间隔四个字符(几个点就是几个字符)
”w…>“ 以w开头,后面有五个字符
“<…s” 以s结尾,前面有五个字符
- :字符出现0-任意次
?:字符出现0-1次
+:字符出现1-任意次
{n}:字符出现n次
{m,n}:字符最少出现m次,最多出现n次
{0,n} :0-n次
{m,}:至少m次
(xy){n} :xy出现n次
.*:任意字符
二.基本元字符
1.基本元字符:^ $
egrep -m10 '/sbin/nologin' /etc/passwd
egrep -c '/sbin/nologin' /etc/passwd
2.基本元字符:. ##过滤非空行
egrep -v '.' redhat ##过滤空行
egrep '^$' redhat
3.基本元字符: + ? *
egrep 'l+' 1.sh ####输出包括l,ll,lll....,即至少出现一次
4.基本元字符:{ }
三.cut命令
cut -d ##指定分隔符
cut -d : -f 1-3 /etc/passwd ##指定分隔符为:,显示第1到3列
cut -c 1,4 /etc/passwd ##显示第一和第四个字符
练习1:获取主机IP
ifconfig eth0 | grep "inet " | awk '{print $2}'
ifconfig eth0 | grep "inet " | cut -d " " -f 10
练习2:检测网络
ping -c1 -w1 172.25.254.$1 &> /dev/null && echo 172.25.254.$1 is up || echo 172.25.254.$1 is down
四.sort命令:排序
sort
-n ##纯数字排序
-r ##倒序
-u ##去掉重复数字
-o ##输出到指定文件中
-t ##指定分隔符
-k ##指定要排序的列
五.uniq命令:对重复字符处理
uniq
-u ##显示唯一的行
-d ##显示重复的行
-c ##每行显示一次并统计重复次数
六.test命令
test "$a" == "$b" 等同于 [ "$a" == "$b" ]
[ "$a" = "$b" ] ##等于
[ "$a" != "$b" ] ##不等于
[ "$a" -eq "$b" ] ##等于
[ "$a" -ne "$b" ] ##不等于
[ "$a" -le "$b" ] ##小于等于
[ "$a" -ge "$b" ] ##大于等于
[ "$a" -gt "$b" ] ##大于
[ "$a" -lt "$b" ] ##小于
[ "$a" -ne "$b" -a "$a" -gt "$b" ] ##-a必须条件都满足
[ "$a" -ne "$b" -o"$a" -gt "$b" ] ##-a条件至少满足一个
[ -z "$a" ] ##是否为空
[ -e "file" ] ##是否存在
[ -f "file" ] ##普通文件
[ -b "file" ] ##块设备
[ -S "file" ] ##套接字
[ -c "file" ] ##字符设备
[ -L "file" ] ##软链接
练习:判断输入的数字是否在10以内
1.输入是否为空
2.是否在10以内
3.1<a<10−−>yes4.a<10 --> yes
4.a<10−−>yes4.a<1 $a>10 --> no
#!/bin/bash
[ -z "$1" ] && {
echo "please input a number!"
exit 1
}
[ "$1" -gt "0" -a "$1" -lt "10" ] && {
echo "YES"
}||{
echo "NO"
}