正则表达式和Shell脚本
一、正则表达式
1.grep与egrep工具
grep命令的格式
grep [-cinvABC] 'word' filename
-c 表示要打印的行数
-i 忽略大小写
-n 输出符合要求的行和行号
-v 表示打印不符合要求的行
-A 后面跟一个数字,例如-A2表示打印符合要求的行以及下面的两行
-B 后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行
-C 后面跟一个数字,例如-C2表示打印符合要求的行以及上下各两行
实例说明
grep -n '关键词' 文件 过滤出文件中待这个关键词的行,且显示行号
image.png
grep -v '关键词' 文件名 过滤不符合要求的行
与n组合使用,显示不符合要求的行和行号
在linux中,^表示行开头, image.png
替换命令,s操作,g表示全局
如: sed '1,9s'/2/8/g test.txt 1到9行所有的2替换为8
image.png
直接修改文件内容 -i操作
sed -i 's/2/8' test.txt 把2换成8
3.awk工具的使用
awk兼具sed的所有功能,并且更强大。
awk的使用很复杂,甚至有专门的书介绍。常用的命令如下:
3.1 awk -F 指定分隔符
eg: head -n2 test.txt | awk -F':' 'print 1,0表示整行
注意格式,-F后面紧跟分隔符
3.2 匹配字符或者字符串
awk '/oo/' test.txt 匹配字符,类似sed的用法
awk -F':' '1,1,$3}
3.3 条件操作符
awk -F ':' '$3=="o"' /etc/passwd
3.4 awk内置变量
OFS、NF、NR
OFS和-F类似功能,用来定义分隔符的
NF表示用分隔符分割后一共有多少段
NR表示行号
OFS用法:
head -5 /etc/passwd | awk -F ':' '{OFS="#"}' {print 3, $4}
NF用法:
head -n3 /etc/passwd |awk -F ':' '{print NF}'
$NF 最后一段的值
NR用法
head -n3 /etc/passwd | awk -F ':' '{print NR}'
3.5 awk的数学运算
二、shell脚本
1.基本脚本介绍
脚本建议放在/usr/local/sbin中
脚本开头#! /bin/bash
脚本名以.sh结尾
执行脚本:sh first.sh 或者./first.sh ,第一种需要添加执行权限,chmod +x first.sh
第一个脚本:
#! /bin/bash
# this is first shell script
# writen by name 2018-8-8
date
echo "Hello World";
输出结果:
image.png
2. 命令date
常用的date用法如下:
date +%Y 四位数字打印年份
date +%y 2位数字打印年份
date +%m 月份
date +%d 日期
date +%H 小时
date +%M 分钟
date +%S 表示秒
date +%w 星期
eg:
date +"%Y-%m-%d %H:%M:%s"
date -d "-1 day" +%d #前一天的日期
date -d "-1 hour" +%H #前一个小时
3. shell中的变量
定义变量的方式是:变量名=变量值
其中反引号``中的内容表示安装shell脚本执行。
#! /bin/bash
# the shell is exanple2
# writen by name 2018-8-8
d=`date +%H:%M:%S`
echo 'the script begin at $d'
echo "now we sleep 5 seconds"
sleep 5
d1=`date +%H:%M:%S`
echo "the script end at $d1"
4.数学运算
数学运算要用[](方括号)括起来,切方括号前要加符号$
#! /bin/bash
# 这是数学运算的shell脚本
# writen in 2018-8-8
a=1
b=2
sum=$[$a+$b]
echo "$a+$b=$sum"
4. 和用户交互
read命令用于和用户交互,它把用户输入的字符串作为变量值。
#! /bin/bash
## useing read in shell script
## 2018-8-9
read -p "please input a number:" x
read -p "please input another number" y
sum=$[$x+$y]
echo "the sum of numbers is: $sum"
5. shell脚本预设变量
在执行脚本的时候,后面可以加参数,如同java一样
如下脚本:
#! /bin/bash
## 预设变量
sum=$[$1+$2]
echo "sum is $sum"
执行时候,使用sh option.sh 10 20 来执行,那么2分别指的是第一个和第二个参数,$0表示脚本的名字
6. shell脚本中的if判断
格式:
if 判断语句; then
command
fi
#! /bin/bash
## if的使用
read -p "please input a number" a
if((a<60)); then
echo "you didn't pass this exam"
fi
((a<60))是shell中特有的样式,只有一对是报错的,当然还有另外的方式
7. 带else的判断
格式:
if 判断语句;then
command
else
command
fi
8. 带elif(其他语言中的else if)
格式:
if 判断语句; then
command
elif 判断语句2; then
command
else
command
fi
判断数值的时候使用(()),也可以使用[],但是在[]中不能使用>、<、=符号,使用讴歌
-lt:小于,-gt:大于,-le:小于等于,-ge:大于等于,-eq:等于,-ne:不等于
9. 和文档相关的判断
可以使用if操作去判断文档的二属性,常见操作如下:
-e 判断文件或目录是否存在
-d 判断是不是目录以及是否存在
-f 判断是不是普通文件以及是否存在
-r 是否有读权限
-w 是否有写权限
-x 是否可执行
例如:
if[-e filename];then
command
fi
10. case逻辑判断
格式:
case 变量 in
value1)
command;;
value2)
command;;
value3)
command;;
*)
command;;
esac
11.for循环
格式:
for 变量名 in 循环条件; do
command
done
例如:
#! /bin/bash
## for循环使用
for i in `seq 1 5`;do
echo $i
done
注:seq 1 5 表示从1到5的序列
12.while循环
格式:
while 条件; do
command
done
eg:
a=5
while [ $a -ge 1 ];do
echo $a
a=$[$a-1]
done
注:[后面有空格,]前面有空格
#######13.shell脚本中的函数
格式:
function 函数名() {
command
command
}
eg:
#! /bin/bash
function sum() {
sum = $[$1+$2]
echo $sum
}
sum $1 $2
14.shell脚本中的中断和连续
break:结束循环
continue:结束本次循环
exit:直接退出shell脚本
与Java等语言类似
eg:
#! /bin/bash
##
for i in `seq 1 5`
do
echo $i
if[ $i == 3 ]
then
break
fi
echo $i
done
网友评论