sed 行编辑器
- 主要是个文本编辑器 (man sed) 比如:删除某一行 抽取某一行到
新的文件中是一种在线编辑器,它一次处理一行内容。处理时,把当 前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)(为什么叫模式空间呢:因为 sed(不是所有的行都处理)可以指定仅仅处理哪些行,所以 sed 可以像 grep 一样做模式过滤的 符合模式条件的处理 不符合条件的不予处理 ),接着用sed 编辑命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。符合模式(模式空间中的模式 每次读取一行 匹配模式 编辑命令)做编辑(到底是删除还是现实还是什么 取决于 sed的编辑命令)Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等
2.定址可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如 1,3 表示 1,2,3 行,美
元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定
3.Sed 命令格式
调用 sed 命令有两种形式:
sed [options] ‘command’ file(s)
sed [options] -f scriptfile(你可以把 sed 理解为一种简单的语言 只不过这种语言 仅仅只对文件做编辑 脚本由sed 命令组成) file(s)
sed [options] ‘command’ file
p 显示模式操作
sed -n ‘/:/p’ fstab 显示有:的行
sed -n ‘/UUID$/p’ fstab 显示UUID结尾的行
sed -n ‘/^UUID/’ fstab 显示UUID开始的行
sed -n ‘2,6p’ fstab 显示2到6行
sed -n ‘2,6!p’ fstab 显示非2到6行
d 删除模式操作
sed ‘/^UUID/d’ fstab 删除UUID开头的行显示
sed ‘/^#/d’ fstab 删除#开头的行显示
sed '/^
/
d
′
f
s
t
a
b
删
除
/d' fstab 删除
/d′fstab删除开头的行显示
sed ‘1,4d’ fstab 删除1到4行显示
sed ‘/^UUID/!d’ fstab 删除不是UUID开头的行显示(对地址定界取反)
c 替换模式操作
sed ‘/^UUID/c hello’ fstab 把UUID开头的行替换为hello
w 写模式操作
sed ‘/^UUID/w /mnt/fstab.txt’ fstab 把fstab里的UUID开始的行写进fstab.txt文件
sed ‘/^UUID/=’ fstab 显示UUID开头的行号和行
sed ‘6r /etc/issue’ fstab 把issue整合到fstab第6行
a 添加模式操作
sed ‘/^UUID/a \hello sed /etc/fstab’(追加到每一行符合条件
的行后面)
sed ‘/^UUID/a \hello sed\nwestos /etc/fstab’(支持多行追加)
i 追加
sed ‘/^UUID/i\hello sed\nwestos /etc/fstab’(追加在符合条件
的行前面)
sed的其他用法
sed ‘G’ file 给文件内容加个空行
sed ‘KaTeX parse error: Expected 'EOF', got '\n' at position 63: …ata | sed 'N;s/\̲n̲//'行号在行首 sed -n…p’ data 显示最后一行
sed ‘/^$/’ file 显示空行
s/pattern/string/ pattern 可以用正则表达式而 string 不可以,查找并替换
对可能含有空白行的文加倍行间距:首先删除数据流中的所有空白
行,然后用 G 命令在所有行后插入新的空白行
sed ‘/^
/
d
;
/d;
/d;!G’ data
打印末尾行
sed -n ‘$p’ data