linux sed命令用于过滤和转换文本的流编辑器详解

作者: admin 分类: linux常用命令大全 发布时间: 2018-07-01 18:52

  sed用于过滤和转换文本的流编辑器

  功能描述:

  使用sed命令可以用于过滤和转换文本。

  命令语法:

  sed[选项][脚本][输入文件]

  sed命令选项含义

 

 选项

 含义

 --posix  关闭所有GNU扩展
 -n  取消自动打印模式空间
 -r  在脚本中使用扩展正则表达式
 -s  将输入文件视为各个独立的文件而不是一个长的连续输入
 -u  从输入文件读取最少的数据,更频繁地刷新输出
 -e<脚本>  添加指定脚本到程序的运行列表
 -f<脚本文件>  添加指定脚本文件到程序的运行列表
 -c  使用复制而不是重命名
 -i<后缀>  在place中编辑文件
 -l<长度>  指定换行期望长度

 

 

sed命令

 

 命令

 描述

 a\ 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行 
 c\  用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用“\”续行
 i\  在当前行之前插入文本。多行时除最后一行外,每行末尾用“\”续行
 d  删除行
 h  把模式空间里的内容复制到暂存缓冲区
 H  把模式空间里的内容追加到暂存缓冲区
 g  把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
 G  把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面
 l  列出非打印字符
 p  打印行
 n  读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理
 q  结束或退出sed
 r  从文件中读取输入行
 !  对所选行以外的所有行应用命令
 s  用一个字符串替换另一个
 g  在行内进行全局替换
 w  将所选的行写入文件
 x  交换暂存缓冲区与模式空间的内容
 y  将字符替换为另一字符(不能对正则表达式使用y命令)

 

 

grep一样,sed也支持特殊元字符,来进行模式查找、替换。不同的是,sed使用的正则表达式是括在斜线“\”之间的模式。

如果要把正则表达式分隔符“\”改为另一个字符,比如o,只要在这个字符前加一个反斜线,在字符后跟上正则表达式,再跟上这个字符即可。例如:sed -n '\o^Myop' datafile。

正则表达式元字符

 

 元字符

 功能

 示例

 ^  行首定位符  /^my/匹配所有以my开头的行
 $  行尾定位符  /my$/匹配所有以my结尾的行
 .  匹配除换行符以外的单个字符  /m..y/匹配包含字母m,后跟两个任意字符,再跟字母y的行
 *  匹配零个或多个前导字符  /my*/匹配包含字母m,后跟零个或多个y字母的行
 []  匹配指定字符组内的任一字符  /[Mm]y/匹配包含My或my的行
 [^]  匹配不在指定字符组内的任一字符  /[^Mm]y/匹配包含y,但y之前的那个字符不是M或m的行
 \(..\)  保存已匹配的字符  1,20s/\(you\)self/\1r/标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第20行进行处理,you被保存为标签1,如果发现youself,则替换为your
 &  保存查找串以便在替换串中引用  s/my/**&**/符号&代表查找中。my将被替换为**my**
 \<  词首定位符  /\<my/匹配包含以my开头的单词的行
 \>  词尾定位符  /my\>/匹配包含以my结尾的单词的行
 x\{m\}  连续m个x  /9\{5\}/匹配包含连续5个9的行
 x\{m,\}  至少m个x  /9\{5,\}/匹配包含至少连续5个9的行
 x\{m,n\}  至少m个,但不超过n个x  /9\{5,7\}/匹配包含连续5到7个9的行

 

 

例如:只显示/etc/passwd文件的第3行内容。

[root@localhost ~]# sed -n '3p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin

只显示/etc/passwd文件中的第10行到第20行内容

[root@localhost ~]# sed -n '10,20p' /etc/passwd
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin

排除第2行到第5行显示/etc/passwd文件中内容

[root@localhost ~]# sed '2,5d' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
gdm:x:42:42::/var/lib/gdm:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
apache:x:48:48:Apache:/var/www:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
tcpdump:x:72:72::/:/sbin/nologin



相关文章:

 linux awk命令统计模式扫描和处理语言详解



Linux 命令大全

更多

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!