sed可依照script的指令,来处理、编辑文本文件。
流编辑器 stream editer,是以行为单位的处理程序
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e<script> 以选项中指定的script(命令行)来处理输入的文本文件。
{} 命令组合 命令用分号分隔 {1h;G} 可以理解为 -e 参数的另一种写法
-f<script文件>以选项中指定的script文件来处理输入的文本文件。
-n或--quiet或--silent 仅显示script处理后的结果。
-r 支持扩展正则表达式
-i 直接修改文件内容
动作说明:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何命令行;
s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
正则介绍(基本)
^ 行首
$ 行尾
. 除了换行符以外的任意单个字符
* 前导字符的零个或多个
.* 所有字符
[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
^[^] 非字符组内的字符开头的行
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 小写和大写字母
[0-9] 数字
\< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
\> 单词尾
x\{m\} x出现m次
x\{m,\} x出现m次至多次(至少m次)
正则介绍(扩展)
? 前导字符零个或一个
+ 前导字符一个或多个
abc|def abc或def
a(bc|de)f abcf 或 adef
(bc)+ bc 或 bcbc....
- 正则必须用/ /包裹起来
- 扩展正则需要用 -r 参数或使用转义符号\
使用实例
实验文件内容:
1,删除文件每行的第一个字符:
2,删除文件每行开头的第一个单词:
还有一个开头的空格没有去掉怎么办?
方法1:连续使用两个 sed命令
: 方法2:分组技巧
4,搜索并替换关键单词
替换第2行数字2000 为100
5.把name替换成大学写字母并用括号()括起来: sed -r 's/[A-Z]/(&)/g' passwd
提示:分组引用;多点编辑;
6,用命令获取格式为 mm/yy/dd 的日期格式,结合管道,将其换成 mm;yy;dd格式
date "+%m/%y/%d" | sed -r 's/\/\-/g'
7.插入新的行
8.替换第二行的内容
9.删除第二行的内容
10.匹配删除