Linux中的sed详解

Sed简介

Sed取各种内容 Stream Editor  流式编辑器 又称行编辑器每次只编辑一行。Sed工作是在“模式空间”中进行的并不操作源文件。对源文件无危害。

Sed使用格式

sed [-nefri] ‘command’ 输入文本

sed使用参数

-n 使用安静(silent)模式。在一般 sed 的用法中所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。

-e 直接在命令列模式上进行 sed 的动作编辑

-f 直接将 sed 的动作写在一个文件内 -f filename 则可以运行 filename 内的 sed 动作

-r sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)

-i 直接修改读取的文件内容而不是输出到终端。

动作说明 [n1[,n2]]function

n1, n2 不见得会存在一般代表『选择进行动作的行数』举例来说如果我的动作是需要在 10 到 20 行之间进行的则『 10,20[动作行为] 』

function

a 新增 a 的后面可以接字串而这些字串会在新的一行出现(目前的下一行)

c 取代 c 的后面可以接字串这些字串可以取代 n1,n2 之间的行

d 删除因为是删除啊所以 d 后面通常不接任何咚咚

i 插入 i 的后面可以接字串而这些字串会在新的一行出现(目前的上一行)

p 列印亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

s 取代可以直接进行取代的工作哩通常这个 s 的动作可以搭配正规表示法例如 1,20s/old/new/g

企业面试题

请执行命令取出 linux 中 eth0 的 IP 地址请用cut有能力者也可分别用awksed命令答。

用grep命令实现

用cut命令来实现

用awk来实现

[[email protected] ~]# ifconfig eth0|grep "inet addr"|awk -F ":" ‘{print $2}‘

192.168.1.49  Bcast

[[email protected] ~]# ifconfig eth0|grep "inet addr"|awk -F ":" ‘{print $2}‘|awk ‘{print $1}‘

192.168.1.49

[[email protected] ~]# ifconfig eth0|grep "inet addr"|awk -F "[: ]" ‘{printf $13}‘

192.168.1.49

[[email protected] ~]# ifconfig eth0|grep "inet addr"|awk -F "[: ]+" ‘{printf $4}‘

192.168.1.49

[[email protected] ~]# ifconfig eth0|awk -F "[: ]+" ‘NR==2 {printf $4}‘

192.168.1.49

④sed基础正则替换语法

处理技巧

处理需要的目标获取的字符串如上文的ip前面的字符串一般用以……开头^.*来匹配开头匹配的结尾写上实际的字符如“^.*addr:”表达式就匹配“     inet addr:”

而处理需要的目标后的内容一般在匹配的开头写上实际的字符而结尾是用以……结尾(.*$)来匹配。如Bcast:.*$部分表示匹配“ Bcast:192.168.1.255  Mask:255.255.255.0”

取MAC地址

此题是处理目标前的内容所以用“^.*HWaddr”匹配“eth0   Link encap:Ethernet  HWaddr”。

[[email protected] ~]# ifconfig eth0|sed -n ‘s#^.*addr:\(.*\)  BCAST.*$#\1#gp‘

Sed小括号分组功能

实例

Sed命令替换功能小结

替换一行中的某部分

  格式sed ‘s/要替换的字符串/新的字符串/g‘   要替换的字符串可以用正则表达式
     [[email protected] ruby] # sed -n ‘/ruby/p‘ ab | sed ‘s/ruby/bird/g‘    #替换ruby为bird
   [[email protected] ruby] # sed -n ‘/ruby/p‘ ab | sed ‘s/ruby//g‘        #删除ruby

插入
     [[email protected] ruby] # sed -i ‘$a bye‘ ab         #在文件ab中最后一行直接输入"bye"
     [[email protected] ruby]# cat ab
     Hello!
     ruby is me,welcome to my blog.
     end
     bye

删除匹配行

sed -i ‘/匹配字符串/d‘  filename  注若匹配字符串是变量则需要“”而不是‘’。记得好像是

替换匹配行中的某个字符串

sed -i ‘/匹配字符串/s/替换源字符串/替换目标字符串/g‘ filename

时间: 2024-12-24 21:57:05

Linux中的sed详解的相关文章

Linux中pam认证详解(下)

Linux中pam认证详解(下) 在上一篇中详细的介绍了pam的介绍.pam认证原理.pam认证构成以及pam验证控制类型,下面向大家详细介绍一下常用的pam服务模块,以及pam认证的应用. 一.常用的pam服务模块 下面是Linux提供的PAM模块列表(只是其中一部分),这其中包含模块文件.模块功能描述和相关配置文件,具体如下: pam_access 提供logdaemon风格登录控制 /etc/security/access.conf pam_chroot 提供类似chroot命令的功能 p

linux中fork()函数详解[zz]

转载自:http://www.cnblogs.com/york-hust/archive/2012/11/23/2784534.html 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有

linux中ls命令详解

s 命令可以说是linux下最常用的命令之一. -a 列出目录下的所有文件,包括以 . 开头的隐含文件.-b 把文件名中不可输出的字符用反斜杠加字符编号(就象在C语言里一样)的形式列出.-c 输出文件的 i 节点的修改时间,并以此排序.-d 将目录象文件一样显示,而不是显示其下的文件.-e 输出时间的全部信息,而不是输出简略信息.-f -U 对输出的文件不排序.-g 无用.-i 输出文件的 i 节点的索引信息.-k 以 k 字节的形式表示文件的大小.-l 列出文件的详细信息.-m 横向输出文件名

【转】linux中inittab文件详解

原文网址:http://www.2cto.com/os/201108/98426.html linux中inittab文件详解 init的进程号是1(ps -aux | less),从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序. init程序需要读取配置文件/etc/inittab.inittab是一个不可执行的文本文件,它有若干行指令所组成. 理解Runlevel: runlevel用来表示在init进程结束之后的系统状态,在系统的硬

Linux中的sudoer详解

目录 Linux中的sudo详解 一.引言 二.格式 三./etc/sudoers文件 四.sudoers文件讲解 五.其他 Linux中的sudo详解 一.引言 Liunx用户只有两类: 管理员用户---root 普通用户--其他 我们在学习sudo命令之前,肯定学习过su(switch user)命令,su命令是用来切换用户身份的命令,而sudo命令是一种切换用户来执行某种操作的命令 su和sudo的区别: su命令的主要作用是让你可以在已经登录的会话中切换到另外一个用户,换句话说,这个工具

Linux中rm命令详解

linux下rm命令使用详解---linux删除文件或目录命令 用户可以用rm命令删除不需要的文件.该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除.对于链接文件,只是断开了链接,原文件保持不变. rm命令的一般形式为:rm [选项]... 目录... 删除指定的<文件>(即解除链接). -d      --directory    删除可能仍有数据的目录 (只限超级用户) -f      --force          略过不存在的文件,

Linux中用户管理详解

一.原理了解 在Linux系统中,所有的用户和组像一个国家.如果国家要繁荣昌盛的话,需要治理得当,需要有主席或者总统,以及地方官员和老百姓组成.在linux中如果你对安全需求比较苛刻,完全可以限制用户的各种行为,不同用户的权限是不同的. 在linux中系统中,它并不认识帐号名称.它认识的是我们的帐号ID,帐号ID保存在/etc/passwd文件中.我们在登录linux主机时,在输入完帐号和密码时,linux会先查找/etc/passwd文件中是否有这个帐号,如果没有则跳出,如果有的话,他会读取该

linux中find命令详解

http://blog.csdn.net/pipisorry/article/details/39831419 问题: linux中find命令查找时不包含某些目录 find 命令忽略某个或多个子目录的方法 在linux中用find 进行查找的时候,有时候需要忽略某些目录不查找,可以使用 -prune 参数来进行过滤,要忽略的路径参数必须紧跟着搜索的路径之后,否则该参数无法起作用. eg: [email protected]:/tmp1#find ./ -type f    #/tmp1目录下所

linux中inittab文件详解

init的进程号是1(ps -aux | less),从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序. init程序需要读取配置文件/etc/inittab.inittab是一个不可执行的文本文件,它有若干行指令所组成. 理解Runlevel: runlevel用来表示在init进程结束之后的系统状态,在系统的硬件中没有固定的信息来表示runlevel,它纯粹是一种软件结构.init和inittab是runlevel影响系统状态的唯一原因