Linux - sed命令

Linux sed命令

sed命令是以理script来处理文本文件。

sed可依照script指令,来处理、编辑文本文件。它主要是用来自动编辑一个或多个文件,简化对文件的反复操作等。


语法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

sed可选参数:

  • -n:使用安静模式,在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
  • -e:sed将要执行的内容
  • -f:表示在对哪个文件执行sed操作
  • -r:支持扩展表达式
  • -i:直接修改文件内容

script可选参数

  • a:新增,a后面可以接字符串,而这些字符串会再新的一行出现(目前的下一行)
  • c:取代,c后面可以接字符串,这些字符串可以取代n1,n2之间的行
  • d:删除,后面不接东西
  • i:插入:i后面可以接字符串,而这些字符串会再新的一行出现(目前的上一行)
  • p:打印,将某个选择的数据打印,通常回合sed -n一起运行
  • s:取代,可以使用正则匹配

例如,在testfile文件的第四行后添加一行,并将结果输出:

sed -e '4a/newLine testfile'

1. 对行的操作

1.1. 以行为单位的新增、删除

例如,将/etc/passwd的内容列出并且打印行号,同时将2-5行删除:

nl /etc/passwd | sed '2,5d'

sed的动作为'2,5d',d就是删除,2,5就是2到5行,用逗号分隔。

sed后面接的动作,务必加上两个单引号。

例如,删除第二行:

nl /etc/passwd | sed '2d'

例如,删除第三行到最后一行:

nl /etc/passwd | sed '3,$d'

例如,在第二行后,加上"drink tea":

nl /etc/passwd | sed '2a drink tea'

如果是在第二行前:

nl /etc/passwd | sed '2i drink tea'

添加两行及两行以上

如果要添加两行及两行以上,在第二行后面加入两行字

nl /etc/passwd | sed '2a Drink tea or\ > drink beea' 

每一行之间都必须用反斜杠\来区分

1.2. 以行为单位的替换、显示

例如,将第2-5行的内容取代成为"No 2-5 number":

nl /get/passwd | sed '2,5c No 2-5 number'

2. 对数据的操作

2.1. 数据的搜寻、删除

删除/etc/passwd所有包含root的行,其他行输出(使用/数据/来匹配数据):

nl /etc/passwd | sed '/root/d'

2.2. 数据的搜寻、执行命令

搜索 /etc/passwd 找到 root 对应的行,并把bash替换成blueshell,再输出

nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'

这里讲解下各个参数:

  • /root/:查找root所在的地方
  • /bash/blueshell/:将bash替换成blueshell
  • ;:每个命令之间要用分号分隔,
  • {}:sed不同的编辑命令,用花括号分隔。比如这里其实是两部分,第一部分搜寻root,第二部分替换

2.3. 数据的搜寻、替换

基本语法:

sed 's/要被取代的字符串/新的字符串/g'

因为匹配可以使用正则表达式,所以有很大的灵活性。

例如搜索出本机的IP:

ifconfig eth0 | grep 'inet' | sed 's/^.*inet //g' | sed 's/net.*$//g'

2.4. 复合操作

可以将多条sed操作写在一起来执行。

写一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换成blueshell

cat /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
posted @ 2019-02-19 14:08  Yisany  阅读(238)  评论(0编辑  收藏  举报