sed实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed实例相关的知识,希望对你有一定的参考价值。

sed: Stream Editor 

行编辑器 逐行编辑

将每行内容读入到内存中,在内存中进行处理,将结果返回给屏幕 ,此段内存空间称为模式空间

默认不编辑原文件,仅对模式空间的数据进行处理,处理结束后,将模式空间的内容显示到屏幕 


sed命令的使用格式


sed [options] ‘AddressCommand‘ file ...


Address:表示对哪些行进行处理

Command:操作命令

options:

-n:不再显示模式空间中的内容(默认显示)

-i: 直接修改原文件

-e ‘AddressCommand‘ -e ‘AddressCommand‘:同时执行多个匹配操作

-f file_name 将多个AddressCommand保存至文件中,每行一个AddressCommand;读取该文件中的操作同时执行多个操作 

-r:表示使用扩展正则表达式

Address表示方法:

1、StartLine,EndLine 

1,100

$表示最后一行

1,$ 


2、/Regex/

/oot/ 

/^oot/

3、/Regex1/,/Regex2/

第1次被Regex1匹配的行开始,到第1次被Regex2匹配的行中间的所有行

4、LineNumber

10 

精确匹配特定的行

5、StartLine,+N

1,+3

从startline开始,向后的N行

Command:

d  删除符合条件的行

  # sed ‘1,2d‘ /etc/inittab 

  删除文件中包含oot的行

  # sed ‘/oot/d‘ /etc/fstab 

  删除第1行及其后2行

  # sed ‘1,+2d‘ /etc/fstab 

  删除第1行

  # sed ‘1d‘ /etc/fstab 

  

  删除以/开头的行

  # sed ‘/^\//d‘ /etc/fstab 

p  显示符合条件的行

  显示以/开头的行 

  # sed -n ‘/^\//p‘ /etc/fstab 

  

a \string 在符合条件的行后追加新行,string为追加的内容

  在以/开头的行后面追加# hello world 

  # sed ‘/^\//a \# hello world‘ /etc/fstab 

  

  在以/开头的行后面追加两行内容,分别为# hello worl  # hello linux 

  # sed ‘/^\//a \# hello world\n# hello linux‘ /etc/fstab 

i \string 在符合条件的行前添加新行,string为追加的内容

   在文件第1行添加# hello world 

   # sed ‘1i \# hello world‘ /etc/fstab 

   

r file_name 将指定文件的内容添加到符合条件的行的后面

   在文件的第2行后追加/etc/issue文件的内容 

   # sed ‘2r /etc/issue‘ /etc/fstab 

   

w file_name 将符合条件的内容另存到指定文件中

   将以UUID开头的行另存为到/1.txt中

   # sed ‘/^UUID/w /1.txt‘ /etc/fstab 

   


s/regex/string/[修饰符] 查找并替换(默认情况下只替换每一行第1次被匹配的字符)

   修饰符:

g:替换每一行所有的字符

i:忽略大小写


   查找文件中的UUID,并替换为uuid

   # sed ‘s/UUID/uuid/‘ /etc/fstab 

   

   将行首的/替换成#

   # sed ‘s/^\//#/‘ /etc/fstab 

   

   将每一行出现的所有/替换为@

   # sed ‘s/\//@/g‘ /etc/fstab 

   

   反向引用 \(\)   \1  \2 

   将文件中以l..e替换为l..er,例如love替换为lover

   # sed ‘s/\(l..e\)/\1r/g‘ /etc/fstab 

   或

   # sed ‘s/l..e/&r/g‘ /etc/fstab 

   &:引用正则表达式匹配的所有字符串

   

   将文件中l..e的单词替换为L..e,例如love替换为Love

   # sed ‘s/l\(..e\)/L\1/‘ /1.txt 

 

   删除行首的空格

   # sed ‘s/^[[:space:]]*//‘ /etc/fstab 

   

= 用于显示每一行的行号

显示/etc/passwd文件最后一行的行号

# sed -n ‘$=‘ /etc/passwd

49

 

c \string 替换指定行的内容

   将文件中最后一行内容替换为End Of File

   # sed ‘$c \End Of File‘ /1.txt 

   

  

sed示例:

1、删除/etc/grub.conf文件中行首的空白字符

# sed ‘s/[[:space:]]*//‘ /etc/grub.conf 


2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5

# sed ‘s/\(id:\)3\(:initdefault:\)/\15\2/‘ /etc/inittab 


3、删除/etc/inittab文件中的空白行

# sed ‘/^$/d‘ /etc/inittab 


4、删除/etc/inittab文件中开头的#号

# sed ‘s/^#//‘ /etc/inittab 


5、删除某文件中开头的#号,但要求#号后面必须有空白字符

# sed ‘s/^#[[:space:]]\+//‘ /1.txt 


6、删除某文件中以空白字符后面跟#号的行中的开头的空白字符及#

# sed ‘s/^[[:space:]]\+#//‘ /1.txt 























本文出自 “江湖笑笑生” 博客,请务必保留此出处http://hashlinux.blog.51cto.com/9647696/1760498

以上是关于sed实例的主要内容,如果未能解决你的问题,请参考以下文章

Linux 之 sed 实例详解

sed实例精解--例说sed完整版

awk&sed 小实例

sed实例(持续更新)

sed命令详解和实例

[Linux Shell学习系列十四]sed和awk-3.sed命令实例