Linux的sed命令详解大全

Linux的sed命令详解大全Linux 的 sed 命令详解大全

一、sed命令介绍

二、sed 的运行模式

当处理数据时,Sed 从输入源一次读入一行,并将它保存到所谓的模式空间pattern space中。所有 Sed 的变换都发生在模式空间。变换都是由命令行上或外部 Sed 脚本文件提供的单字母命令来描述的。大多数 Sed 命令都可以由一个地址或一个地址范围作为前导来限制它们的作用范围。

三、sed的相关选项

 -n, --quiet, --silent 取消自动打印模式空间 -e 脚本, --expression=脚本 添加“脚本”到程序的运行列表 -f 脚本文件, --file=脚本文件 添加“脚本文件”到程序的运行列表 --follow-symlinks 直接修改文件时跟随软链接 -i[扩展名], --in-place[=扩展名] 直接修改文件(如果指定扩展名就备份文件) -l N, --line-length=N 指定“l”命令的换行期望长度 --posix 关闭所有 GNU 扩展 -r, --regexp-extended 在脚本中使用扩展正则表达式 -s, --separate 将输入文件视为各个独立的文件而不是一个长的连续输入 -u, --unbuffered 从输入文件读取最少的数据,更频繁的刷新输出 --help 打印帮助并退出 --version 输出版本信息并退出 -a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~ -c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行! -d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚; -i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行); -p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~ -s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法 

四、sed基本用法

1.sed语法

Usage: sed [OPTION]... {script-only-if-no-other-script} [input-file]... 

2.sed的查看功能

①查看passwd文件的第5到第8行内容

[root@control data]# sed -n '5,8 p' passwd rootaaaa1a1:x:0:0:root:/aa1a2sroot:/bin/bash rootaaaa1a1:x:0:0:root:/aa1a2sroot:/bin/bash rootaaaa1a1:x:0:0:root:/aa1a2sroot:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin 

②查看passwd文件中以roo开头的行

[root@control data]# sed -n '/^roo/ p' passwd root:x:0:0:root:/root:/bin/bash 

③忽略大小写,对含有root字符的行打印出来

[root@control data]# sed -n '/root/I p' passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin 

3.sed的查找功能

查找passwd文件中有/bin/bash字符串的行

[root@control data]# sed -n '\%/bin/bash% p' passwd root:x:0:0:root:/root:/bin/bash admin:x:1001:1001::/home/admin:/bin/bash user1:x:1002:1002:test user:/home/user1:/bin/bash ituser1:x:2002:2002::/data/itusers:/bin/bash redhat:x:2003:2003::/home/redhat:/bin/bash huawei:x:2004:2004::/home/huawei:/bin/bash user3:x:2000:2000::/home/user3:/bin/bash user2:x:2019:2019::/home/user2:/bin/bash user4:x:2025:2025::/home/user4:/bin/bash user5:x:2026:2026::/home/user5:/bin/bash user6:x:2027:2027::/home/user6:/bin/bash postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash user99:x:2028:2028::/home/user99:/bin/bash 

4.将 /data/passwd 第 2~5 行删除打印输出

[root@control data]# sed '2,5 d' passwd |head 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 operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin 

5.以行为单位的新增

①在文件passwd上的第四行后面添加新字符串

root@control data]# sed -e 4a\it-test passwd | head rootaaaa1a1:x:0:0:root:/aa1a2sroot:/bin/bash rootaaaa1a1:x:0:0:root:/aa1a2sroot:/bin/bash rootaaaa1a1:x:0:0:root:/aa1a2sroot:/bin/bash it-test rootaaaa1a1:x:0:0:root:/aa1a2sroot:/bin/bash rootaaaa1a1:x:0:0:root:/aa1a2sroot:/bin/bash rootaaaa1a1:x:0:0:root:/aa1a2sroot:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin 

②passwd第1前追加huawei

[root@control data]# sed '1 i\huawei ' passwd |head huawei root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 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 

6.sed替换功能

①passwd第三行替换为redhat

[root@control data]# sed '3 c\redhat' passwd [root@control data]# sed '3 c\redhat' passwd |head root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin redhat adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 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 operator:x:11:0:operator:/root:/sbin/nologin 

7.sed的查找及替换功能

将passwd的5到10的bin字符串查找出来替换为aaaa

[root@control data]# sed -n '5,10 s/bin/aaaa/ p' passwd |head lp:x:4:7:lp:/var/spool/lpd:/saaaa/nologin sync:x:5:0:sync:/saaaa:/bin/sync shutdown:x:6:0:shutdown:/saaaa:/sbin/shutdown halt:x:7:0:halt:/saaaa:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/saaaa/nologin operator:x:11:0:operator:/root:/saaaa/nologin 

8.sed对原文件操作

①删除原文件第1行

原文件

 cat passwd |head root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 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 operator:x:11:0:operator:/root:/sbin/nologin [root@control data]# 

删除操作后

[root@control data]# sed -i '1 d' passwd [root@control data]# cat passwd |head bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 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 operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin 

②修改原文件之前备份

[root@control data]# sed -i.bak '1 d' passwd 

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209110.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午10:00
下一篇 2026年3月19日 上午10:01


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号