sed
行编辑器,对行进行处理,之后再处理下一行。处理完成后输出到屏幕,此时源文件没有任何改变(不执行写操作)。
定址,决定对那些行进行编辑。地址的形式可以是数字、正则表达式、或者二者的结合。如果没有指定地址,sed将处理输入的所有行。
命令参数
参数 | 含义 |
---|---|
p | |
d | delete |
= | 打印匹配行的行号 |
-n | 取消默认的完整输出,只要需要的 |
-e | 允许多项编辑 |
-i | 修改文件内容 |
-r | 启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项 |
& | 注意,在替换中使用,这个符号在sed中代表上一次匹配的结果 |
$ | 最后一行 |
源文件
fru_2048: ---------------------------------------------------
fru_2048: No: 38
fru_2048: Reason: Ordered restart
fru_2048: Time: 2019-05-21 18:22:56
fru_2048: Program: bc-server
fru_2048: Pid: -
fru_2048: Rank: Cold
fru_2048: Signal: -
fru_2048: PMD: -
fru_2048: Extra: Application ordered restart, faultId: 0xf06e (Restart), faultDescription: Application ordered restart
fru_2049: ---------------------------------------------------
fru_2049: No: 39
fru_2049: Reason: Program Crash
fru_2049: Time: 2019-05-21 18:51:54
fru_2049: Program: rccBbrsNrArm
fru_2049: Pid: 2407
fru_2049: Rank: -
fru_2049: Signal: 11
fru_2049: PMD: /var/log/pmd/pmd-rccBbrsNrArm-2407-20190521-185143.tgz
fru_2049: Extra: CXP2030006%7_R8B18
fru_2049: ---------------------------------------------------
/str/ 匹配
s/str1/str2/g 替换(g: 一行中可进行多次匹配替换)
输出[p]
-
输出第4行
-
注意一定要使用参数-n
来取消默认的完整输出,否则全部打印 -
输出8~14行
-
过滤特定字符串
注意: 字符串要用//括起来,执行匹配命令
-
输出Reason行到Time行
如果没有找到结尾匹配项,则从开始项往后都输出
-
显示行号
-e 每个命令(’…’)都要用一个-e, “=”是显示所有行号
-
只显示匹配行号
-
显示匹配内容和匹配行号
-
输出最后一行
替换[s/src/dst/g]
s/old/new/ 将每行的第1 个old替换为new
s/old/new/3 将每行的第3 个old替换为new
s/old/new/g 将所有的old都替换为new
**替换担任的分隔“/”,可改用其他字符,如#、&等,便于修改文件路径**
- & 符号在sed命令中代表上次匹配的结果
sed 's/world/hello_&/g' test.log
world都被替换成了hello_world
- 在2~5行使用2049替换2048
插入字符串
- 在文件第一行前添加hahahahah,文件尾添加GGGGGGGG
i是前插, a是后插
删除
删除1到5行,实际仅是不显示而已
显示命令的格式也适用
正则表达式
-r启用扩展的正则表达式,若与其他选项一起使用,应作为首个选项
s#^.*r:(.*) B.*k:(.*)$
期望匹配上面输出的整个行,用后面的值替换整个行
IPV4: \1 \nMask: \2#g'
\1和\2对应之前正则表达式匹配中的括号配置值
cat llog.txt | sed -r ‘s/.(.$)/AAA\1/’ 把每行的倒数第二个字符替换成AAA