sed 命令
在shell 编写中,时长会用到对文件的相关操作,比如增加,修改,删除,查看部分内容等,常用的文本编辑器如:gedis、vim、nano等又是交互式文本编辑器、脚本无法自己独立完成、必须人参与才可以完成。如果这样的化违背了我们编写脚本的意愿。
为了解决上述问题、liunx为大家提供了一些命令,比如perl、sed等。
sed命令
sed是liunx中提供的一个外部命令,它是一个行流编辑器,非交互式的对文件尼尔进行增删改查的操作,使用者只能命令行输入编辑命令、指定文件名,然后在屏幕上查看输出。它和文本编辑器有本质的区别
区别
文本编辑器:编辑的对学生文本
行编辑器:编辑对象是文件中的行
语法
sed [options] `{command}{flags}` [filename]
选项 | 说明 |
---|---|
-e | 将脚本指定的命令添加到处理输入时执行的命令中 |
-f | 将文件中指定的命令添加到处理输入的执行的命令中 |
-n | 抑制自动输出,不加会输出字段 |
-i | 编辑文件内容,会修改原文件 |
-i.bak | 修改时同时创建.bak备份文件 |
-r | 使用扩展的正则表达式 |
! | 取反 |
sed -e 's/hello/HELLO;s/hello/HELLO' text #-e 执行多行指令
sed -n 's/hello/HELLO;s/hello/HELLO' text #-n 抑制自动打印,节省内存占用
sed 常用内部指令
选项 | 说明 |
---|---|
a | 在匹配后面添加 |
i | 在匹配前面添加 |
p | 打印 |
d | 删除 |
s | 替换 |
c | 更改 |
= | 行号 |
$= | 获取行数 |
y | 转换 |
---------匹配模式-------------
sed 'a\hello world' text
#text文件中,在每一行下 加hello world
sed '2,4a\hello world' text
#text文件中,在第2行到第4行 后 加hello world
sed '/text中的内容/ a\hello world ' text
#匹配 / / 中的内容 在内容后添加hello world
#i 在每行前面插入
#以上只是在内存中更改文件,并不会更改原文件
--------删除------------------
sed 'd' text #会直接删除文件
sed '2d' text #删除第二行
sed -r '/^#/d' text #引入正则表达式 删除# 开通的行
-------替换-------------------
sed 's/value1/value2/' text #将文本中的value1 替换成vaule2
sed '1s/value1/value2/' text #将文本中的第一行的value1替换成vaule2
--------更改----------------------------
sed 'c\hello world \' text #将所有行更都改为hello world
sed '2,4c\hello world \' text #将2 3 4 所有内容替换为一个hello world
sed '/value/ c \hello world' text #将含有value的行更改为hello world
------------转换--------------------------
sed 'y/abcdef/ABCDEF' text #将text中的对应的abcdef 转换为ADBCEF注意是字符一个一个字符进行转换
------------打印-------------------------
sed /p/ text #打印 会打印两边
flags
选项 | 说明 |
---|---|
数字 | 表示新文本替换的模式 |
g: | 表示用新文本替换现有的文本的内容实例 |
p: | 表示打印原始的内容 |
w filename | 将替换的结果写入文件 |