sed语法
sed [全局参数] '[定址1][,定址2] [操作符] [;[定址1][,定址2] [操作符]]'
常用参数搭配
sed 's/a/b/g' ——> 常用于输出重定向生成新的文件
sed 不加参数,且[操作符]不为p时,默认输出修改后的文本:
sed -n 's/a/b/g p' ——> 常用于打印匹配行
-n:静默状态,默认无任何打印,当[操作]为p时,打印匹配到的行。 -n 和 p 常常一起连用
全局参数详解
定址符
定址符可以是一个(指定某一行),也可以是二个(指定某一个范围)
定址符是一个的情况
数字 (指定某一行)
正则表达式 (匹配到的行)
$ (最后一行)
定址符是二个的情况
二个整数,如1,3(第一行到第三行)
二个正则表达式,如/^aa/,/bb$/(第一个以aa开头的行到第一个以bb结尾的行)
一个整数一个正则表达式,如2,/^aa/(第二行到,第二行之后的第一个以aa开头的行。如果找不到那,会从第二行直接删到最后)
也可以和 $ 搭配使用
sed中所有出现正则表达式的地方都要用/ /包起来
操作符
i : 在匹配行之前插入一个字符串
sed '1 i hello word'(在第一行之前插入hello word,允许有空格)
a : 在匹配行之后插入一个字符串
sed '1 a hello word'(在第一行之后插入hello word,允许有空格)
d : 删除匹配的行
sed '1 d' (删除第一行)
sed '1 !d' (删除所有行,除了第一行)
c : 替换整行
sed '1 c hello word' (第一行换成hello word)
s : 用新的字符串替换旧的字符串
sed 's/旧字符串/新字符串/' (替换匹配行中第一次出现的地方)
sed 's/旧字符串/新字符串/g'(替换匹配行中所有出现的地方)
sed -n 's/旧字符串/新字符串/g p'(替换匹配行中所有出现的地方,并打印出来)
p : 打印匹配到的行
sed -n '1 p'(打印第一行)
sed -n '1 !p'(打印除了第一行)
只有操作符 s 和操作符 p 能连用, 操作符i,a,d均不能与操作符号 p 连用
q : 退出
n : 读取匹配行的下一行
N : 读取匹配行和下一行
I : 忽略大小写
sed -n '/AbC/I p'
= : (=号表示打印行号)
* sed -n '/abc/ =' (打印包含abc字符串行号)
高级用法
sed -r '1 s/12(.)90/\1/g'
这个命令的作用是用第一个变量代替整个字符串
扩号中的内容是一个变量,第一个括号中的内容是\1,第二个是\2。
使用这个高级语法是要加-r(支持扩展的正则表达式)
sed 's/XYZ/'“$value”'/' (使用变量)
sed -n '2 {s/a/1/g;s/b/2/g;p}' (大括号将多条命令组合成一条)
if else,这里要用到b(branch)命令
/abc/b jump_tag #如果匹配到abc则跳转到:jump_tag处执行下一条命令
command2 #else 部分的命令
b #b 不加任何标签的话相当于跳转到最后一条指令(也就是对当前行什么都不再执行)
:jump_tag
command1 #if 部分的命令