sed 流编辑 (流=文件)
sed处理文本文件时,首先会被读到模式空间中,而不修改原文件。
sed可以对文本文件的所有行进行操作,也可以通过正则表达式进行匹配,
使得sed可以只处理模式空间中的被正则表达式匹配到的行。
1.用法
sed 选项 脚本 文件
脚本是 地址定界 和 编辑命令组成
sed操作文本的时候,基于经验来看,如果使用的编辑命令是p,那么需要加上-n选项
,
表示取消默认的输出,其他的编辑命令都不要加-n选项
选项:
-n:不输出模式模式中的内容至屏幕,也就是不会将没有匹配到的文本输出到标准输出,
只是输出编辑到的文本(一般只和打印 “p”一起连用)
-e 脚本:可以指定多个脚本,实现多次编辑
-f 脚本文件: 每一行一个编辑命令
-i:直接修改原文件
-r: 表示使用扩展的正则表达式(就是大部分不用转译)
2.地址定界
全文匹配:地址定界处 空白 即不给定地址 ,vim需要给定%来全文匹配
单地址匹配: 只写一个字符 ,表示匹配单行
多地址匹配: 指定一个范围
模式匹配 : 正则表达式,
列如: /正则表达式/ 表示匹配正则表达式的那行
1,/正则表达式/ 表示 从第一行到正则表达式的那行
步长匹配 :
1~2:表示所有奇数行
2~2:表示所有偶数行
编辑命令
d 删除:删除
sed '1,3d' /etc/passwd 删除/etc/passwd中1到3行
p 打印: 一般与 -r 选项一起用 只显示需要打印的那段 ,不然会多显示一遍需要打印的行
a\字符串:在行后面追加字符串,支持使用\n实现多行追加
i\字符串:在行前面插入字符串,支持使用\n实现多行插入
c\字符串:把匹配到的行替换为字符串
w文件路径:将匹配到的行重定向至指定的文件中
r文件路径:读取指定文件的内容插入到当前文件被匹配到的行处
=:表示被模式匹配到的行上面加上一个行号
!:取反条件
s/ / /:查找替换,常用的有s@@@, s
“空白格” 与 “空白字符所在行“ 的删除
空白行 ‘/^[[:space:]]*$/d’ 由于空白行中并不是空白格所以用查找替换不行
空白格所在行 ‘s/^[[:space:]]+//’ 删除由空白个开头的行
取文件名与取文件路径
取文件名
echo ''var/log/message" | sed -r ‘#^.*/(.*)#\1#’ 这里用了扩展正则表达式 ,如果以/为分割符的话 ,
中间的 “/”会冲突 这里指的是匹配的条件之一不是分割符,也可以加 \ 转译
取文件路径
echo ''var/log/message" | sed -r (‘#^.*)/.*#\1#’ 与取文件名大致相同只不过取的是前面一部分
这里的“()” 用到的是后项引用 括号中是要取的内容
*与+ 区别在于 *是0个或多个 +是1个或多个
简单的bash脚本
bash脚本语言文件格式
第一行#!/bin/bash :定义bash脚本解释器
注释信息:#
代码注释:
缩进,适度添加空白行
bash脚本的变量
局部变量
本地变量
环境变量
位置参数变量
特殊变量
变量类型
与c语言和c++的变量类型相似
1:字符类型
2:数值类型
精确类型
近似类型
3:弱类型:字符型
在使用运算符时,不能加空格
定义: $a=1
ehco"$a" 输出的是1
echo '$a'输出的是$a
bash中支持的运算符以及变量赋值的表达时候
+ , - , * , / , % , **
1:let var=$var1+$var2
2:var=$[expression]:这里虽然expression是字符表达式,但是通过 $[ ]之后就变成了算数运算, 例如:var=$[ 1+2 ]
3:var=$(命令) 这里是将命令输出的结果赋值var变量
4:注意:乘法有些时候需要转义
5:let i=$i+1 等价于 let i+=# 等价于 let i++
let i=$i-1 等价于 let i-=# 等价于 let i--
一个简单的脚本
#!/bin/bash
USER1=$1
USER2=$2
useradd $USER1
useradd $USER2
echo "$USER1 "
~
~