16 shell脚本--007三剑客之sed
1、sed (Stream SDite)
作为行编辑器,对文本进行编辑(以行为单位进行编辑)
注意:sed编辑文件,却不改变原文件;
(1)sed的工作原理:
指定一个文本文件,一次读取文本文件中每行的内容,读取到模式空间中的(PATTERN SPACE),在模式空间中进行文本匹配,(正则表达式)对匹配后的内容进行修改(替换、删出、打印、修改、保存等)
(2)常见选项:
-n 不显示默认输出的内容
-r 指定使用扩展的正则表达式
匹配IP
1、所有的 \ 都不要
2、| ----> 或者
-e script
-f 指定脚本文件
-l 指定文本换行的长度?
-i 直接修改文件内容(不建议使用)
(3)地址定界
1、直接匹配数值
sed -n '5,7p' 文件 ?
2、d(数字)~步长
sed -n '1~3p' 文件
3、$ 指定行尾
sed -n '10,$p' 文件
4、/正则/
/正则1/,/正则2/
sed -n '/fd/,$p' 文件 //fd是文件某一行的内容
5、0,addr
addr可以为数字/$/正则表达式
sed -n '0./k\{5,\}/p' 文件
6、addr,+N
匹配addr行到addr后N行
sed -n '/fd/,+5p' 文件
7、addr,-N
(4)、常见命令
p print 打印(默认在屏幕上显示出来)建议和 -n 一起使用
c 替换行
sed "/aaa/c \A“ 文件
i 添加 在指定行的上一行添加内容
sed -n "/for/i \abc" 文件 在for的上一行添加abc
a 添加 在指定行的下一行添加内容
d 删除
sed ”1,3d“文件
sed ”/aaa/d“ 文件
n N 读取/添加 模式匹配到的行的下一行内容,在对其进行操作
w 保存
sed "/pattern/w 新的文件名" 原来的文件名
s 文本内容替换
语法格式:s/pattern/字符串/
扩展:中间的 / 可以替换成任意一个字符,例如:s### s@@@ s%%%
g 全部匹配
sed "s#k#K#gw /root/text.txt" 文件 //把全部小k替换成大K,然后保存到/root/text.txt
/1 /2 和正则表达式的分组相同,实现相反应用
& 调用前面匹配的内容
sed "s/^bash.*/&er/g" 文件 //在以bash开头的行,后面加er
dirname //取目录名
basename //取文件名
for
for 变量 in 列表;do
循环体
done
for((初始语句; 判断语句; 值变化语句)); do
循环体
done
case
分支
case 变量 in
PAT1)
执行语句
;;
PAT2)
执行语句
;;
*)
默认执行语句
;;
esac
while
循环
格式:
定义初始值
while 条件判断 ; do
循环体
值变化语句
done
其他两种特殊的语句格式:
for i in $(cat /etc/passwd &> /dev/null) 错误写法
while read 变量;do
循环体($变量)
done << /path/filename
就是任性 -- 要写死循环
while true ; do
循环体
done
break 跳出循环
continue 跳出本次循环
sleep 延长多长时间后,继续向下执行命令
until
循环
与 while 用法想用
区别:只有 判断条件为 False 的时候,才会进入循环语句;
。。
if
if 条件判断 ;then
执行语句
fi
if 条件判断 ;then
执行语句1
else
执行语句2
fi
if 条件判断; then
执行语句1
elif 条件判断 ; then
执行语句2
elif 条件判断 ; then
执行语句3
else
执行语句4
fi
---------------------------------------------------------------------------
if语句的写法:
case语句的写法:
read
cpu
cat /proc/cpuinfo
mem
free -m
disk
fdisk -l
quit
echo ""
exit 0