sed简介
- sed工作流程
1、sed是一种在线、非交互式的编辑器,他一次处理一行内容,处理时,吧当前处理的行存储在临时缓冲区中:缓冲区叫模式空间 pattern space。 2、然后sed命令处理缓冲区中的内容,处理完成后,在推动到屏幕。如此一行处理完成后再处理下一行,直到文件末尾。 3、文件内容并没有改变,除非使用重定向存储回去 - 命令格式
sed [options] ‘command’ file(s) sed [options] -f scriptfile file(s) 注意:只有当语法错误时,返回状态为非0
- 支持正则表达式
1、基本元字符集:^ $ . * [] [^] \< \> \( \) \{ \} 2、扩展元字符: ? + { } | ( ) 1、使用扩展元字符方式:sed -r - 简单使用了解sed
sed -r 'p' /etc/passwd
sed -r -n '' /etc/passwd
sed -r -n '/root/p' /etc/passwd
sed -r -n '/root/=' /etc/passwd
sed -r 's/root/admin/' /etc/passwd
sed -r 's/root/admin/g' /etc/passwd
sed -r 's/root/admin/gi' /etc/passwd
sed -r '/root/d' /etc/passwd
sed -r '1,3d' passwd
sed -r '/^root/,5d' /etc/passwd
sed -r '/^root/,+5d' /etc/passwd
sed -r '/root/!d' /etc/passwd
sed -r '1~2d' /etc/passwd
sed命令/选项
命令 | 功能 | 案例 |
---|
a | 在当前行后添加一行或多行 | sed -r ‘2a111’ passwd; sed -r ‘s/root/a111’ passwd | c | 用新的文本修改(替换)当前行中的文本 | sed -r ‘2c111’ passwd; sed -r ‘s/root/c111’ passwd | d | 删除行 | 略 | i | 在当前行之前插入文本 | sed -r ‘2i111’ passwd; sed -r ‘s/root/c111’ | l | 列出非打印字符 | | p | 打印行 | | n | 从当前行的下一行处理 | sed -r ‘/root/{n;d}’ /etc/passwd | ! | 对选中行以外的所有行应用命令 | sed -r ‘s/root/!c111’ | s | 查询标志 | | | g 在行内全局替换 | sed -r ‘s/root/admin/g’ /etc/passwd | | i 忽略大小写 | sed -r ‘s/root/admin/gi’ /etc/passwd | r | 从文件中读取 | sed -r ‘/root/r /etc/mydata’ /etc/passwd ;将mydata读取到匹配到root的行,行后追加 | w | 将行写入文件 | sed -r ‘/root/w /etc/mydata’ /etc/passwd; 源文件mydata内容被覆盖 | h | 把模式空间里的内容复制到暂存缓冲区(覆盖) | | H | 把模式空间里的内容复制到暂存缓冲区(追加) | | g | 取出暂存换从去的内容,将器复制到模式空间(覆盖) | | G | 取出暂存换从去的内容,将器复制到模式空间(追加) | | x | 交换暂存缓冲区与模式空间的内容 | |
选项 | 功能 |
---|
-e | 允许多项编辑 | -f | 指定sed脚本文件名 | -n | 取消默认的输出,静默输出 | -i | inplace 修改源文件内容 | -r | 支持扩展元字符 |
模式空间、暂存空间使用案例
sed -r 'g' /etc/passwd
sed -r 'G' /etc/passwd
sed -r '1{h;d};$G' /etc/passwd
1.txt 1 2 3 4 5 6 要求倒序输出
tac 1.txt
--------------------------------------
sed -r '1!G;h;$!d' 1.txt
1.txt 1 2 3 4 5 6 要求输出 1 2 3 4 5 6
sed -ne 'H;${x;s/\n/ /g;p}' 1.txt
1.txt 1 2 3 4 5 6 要求输出 21
sed -rne 'H;${g;s/\n/\+/g;s/^\+//;p}' 1.txt
sed -ne 'H;${g;s/\n/+/g;s/^+//;p}' 1.txt|bc
sed编辑文件案例(*)
sed -ri '/^#/d' 1.txt
sed -ri '/^[ \t]*#/d' 1.txt
sed -ri '/^[ \t]*$/d' 1.txt
sed -ri '/^(([ \t]*$)|([ \t]*#))/d' 1.txt
sed -ri '/^[ \t]*#/d;/^[ \t]*$/d' 1.txt
sed -ri '$alocal=127.0.0.1' 1.txt
sed -ri '2,3s/^/#/' 1.txt
sed -ri '2,3s/(.*)/#\1/' 1.txt
sed -ri '2,3s/.*/#&/' 1.txt
sed -ri '2,3s/^[ \t]*#*/#/' 1.txt
redisIpConfig="ip=127.0.0.1"
sed -ri '$a'"$redisIpConfig" 1.txt # 注意,${}这种变量引用方式不可用
sed -ri 's/^ip=([0-9.]*)*/'"$redisIpConfig"'/g' 1.txt
|