sed基本用法

Stream EDitor, 行编辑器 

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),

接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,

那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。 

功能:主要用来自动编辑一个或多个文件,简化对文件的反复 操作,编写转换程序等 
    用法: 
        sed [option]…  ‘script’  inputfile… (顺序一定要注意)

常用选项:

-n:不输出模式空间内容到屏幕,即不自动打印 (如果没有-n,原来的内容也会输入,{一行,(处理结果)依次下去})
-e:  多点编辑 (多个处理,用e来连接)
-f:/PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本 
-r:  支持使用扩展正则表达式 
-i.bak: 备份文件并原处编辑 
   注:-i 是直接对原文件进行修改
-i.bak 
   对原来的文件进行修改,但会备份一份以*.bak的原文件

script: ‘地址命令’
地址定界: 
(1) 不给地址:对全文进行处理 
(2) 单地址: 
    # :  指定的行 
     /pattern/:被此处模式所能够匹配到的每一行 
(3) 地址范围: 
   #,# 
   #,+# 
   /pat1/,/pat2/ 
     注:多段匹配的
        比如 /^b/,/^f/p 会找到以b开头到f结尾的字段,如果中间没有会略掉
        如果在下面继续找到了以b开头的字段,但没有找到以f结尾的字段,会把以f以开头到结尾全部显示出来
   #,/pat1/ 
      注:比如 /^b/,10p  以b开头的到第10行打印出来
         如果在后面还有以b开头的还是能打印出来(虽然已经超过第10行了)
         但是满足了^b开头的条件,后而以^b开头还是能正常打印出来的
      注:比如 /^b/,+10p 
         以^b开头的行到后面的加10行一起打印出来
(4) ~:步进 
   1~2 奇数行 1开始跳过2行
   2~2 偶数行 2开始跳过2行

编辑命令: 

d: 删除模式空间匹配的行,并立即启用下一轮循环 
p:打印当前模式空间内容,追加到默认输出之后 
a []text:在指定行后面追加文本 支持使用\n实现 多行追加 
i []text:在行前面插入文本 
c []text:替换行为单行或多行文本 
w /path/somefile: 保存模式匹配的行至指定文件 
r /path/somefile:读取指定文件的文本至模式空间中匹配到的行后 
=: 为模式空间中的行打印行号 
!:模式空间中匹配行取反处理

s///:查找替换,支持使用其它分隔符,s@@@,s### 
替换标记: 
   g: 行内全局替换 
   p: 显示替换成功的行 
   w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
      注:跟使用分组相似,用\1 也可以用 & 代替\1的表示方法
      sed –n ‘s/root/&superman/p’  

高级编辑命令

P:打印模式空间开端至\n内容,并追加到默认输出之前在输出前再追加一行输出
h: 把模式空间中的内容覆盖至保持空间中 

H:把模式空间中的内容追加至保持空间中 
g: 从保持空间取出数据覆盖至模式空间 
G:从保持空间取出内容追加至模式空间 
x: 把模式空间中的内容与保持空间中的内容进行互换 
n: 读取匹配到的行的下一行覆盖至模式空间 
N:读取匹配到的行的下一行追加至模式空间 
d: 删除模式空间中的行 

D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。

如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环

   注:D –>删除模式空间的第一行   循环

注:下列格式可能不对(引号)
sed ‘2p’  /etc/passwd      显示第二行,还有原来的内容
sed –n ‘2p’ /etc/passwd    只显示第二行的内容
sed –n ‘1,4p’ /etc/passwd  显示第1-4行的内容
sed –n ‘/root/p’  /etc/passwd 显示带有root字符的行
sed –n ‘2,/root/p’ /etc/passwd     从第2行开始,显示带有root字符的行
sed -n ‘/^$/=’  file 显示空行行号
sed –n –e ‘/^$/p’ –e ‘/^$/=’  file 显示空行行号 并在下一行显示其行号
sed ‘/root/a\superman’  /etc/passwd 把root用superman代替 行后 
sed ‘/root/i\superman’ /etc/passwd 把root用superman代替 行前 
sed ‘/root/c\superman’ /etc/passwd 把带有root的行用superman代替该行 
sed ‘/^$/d’ file 把空行删除
sed ‘1,10d’   file   把1-10行删除
nl /etc/passwd | sed ‘2,5d’    显示行号并删除2-5行
nl /etc/passwd | sed ‘2a tea’  显示行号并把第2行用tea代替
sed ‘s/test/mytest/g’          全局查找test用mytest代替
sed –n ‘s/root/&superman/p’ /etc/passwd   找出root在 单词后 添加superman 
sed –n ‘s/root/superman&/p’ /etc/passwd   找出root在 单词前 添加superman
sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’         
sed –i.bak  ‘s/dog/cat/g’ 保存原文件以.bak格式保存,并修改原文件中全局的dog替换成cat              

sed -n ‘n;p’ FILE   打印偶数行
sed ‘1!G;h;$!d’ FILE  倒序打印
    1!G 不是第一行执行G操作
    h操作
    $!d 不是最后一行执行d操作
sed ‘N;D’  FILE     打印最后一行 
sed ‘$!N;$!D’ FILE  打印最后二行
sed ‘$!d’ FILE     打印最后一行
sed ‘G’ FILE        原来打印一边。每打印一遍,空一行
读取到模式空间打印原来的第一行
G 读取模式空间追加到保持空间
输出模式空间 –> 现在为空
sed ‘g’ FILE        有多少行,打印多少空行
读取一个到模式空间删除,现在模式空间中没有数据为空  打印空
sed ‘/^$/d;G’ FILE  每打印一遍,空一行
sed ‘n;d’ FILE      打印奇数行
sed -n ‘1!G;h;$p’ FILE  倒序打印

1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符 ?
sed -r ‘s@^[[:space:]]+@@’ /etc/grub2.cfg

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符 ?
sed -r ‘s@^#[[:space:]]+@@’ /etc/fstab

3、在centos6系统/root/install.log每一行行首增加#号 ?
sed -r ‘s@^@#@’ /root/install.log

4、在/etc/fstab文件中不以#开头的行的行首增加#号 ?  
sed -n ‘/![#]/’ /etc/fastab | sed -r ‘s@^@@’
sed -r ‘s@!^#@@’

5、处理/etc/fstab路径,使用sed命令取出其目录名和基名 
[root@centos7 ~]# echo /etc/sysconfig/—network-scripts/ | sed  -r ‘s@(/./)(.)\>/?@\2@’
—network-scripts
[root@centos7 ~]# echo /etc/sysconfig/—network-scripts/ | sed  -r ‘s@(/./)(.)\>/?@\1@’
/etc/sysconfig/

echo  /etc/sysconfig/-network-scripts/ |sed -r ‘s@^(./)([^/]+/?)@\1@’  取目录
echo  /etc/sysconfig/-network-scripts/ |sed -r ‘s@^(.
/)([^/]+/?)@\2@’ 取基名

6、利用sed 取出ifconfig命令中本机的IPv4地址
ifconfig | sed -n ‘2s/.r:(.) B./\1/p’
 
取IP
centos6
ifconfig eth0|sed  -n -e ‘2s/^.
r://’ -e ‘2s/ .$//p’ 
centos7
ifconfig ens33 |sed  -n  -e ‘2s/.
et //’ -e ‘2s/ .$//p’ 
ifconfig ens33 |sed  ‘2!d;s/.
et //;s/ .$//’?

7、统计centos安装光盘中Package目录下的所有rpm文件的 以.分隔倒数第二个字段的重复次数 ?
ls /mnt/cdrom/Packages/ | sed -r ‘s@.
.(.)..\>@\1@’| sort |  uniq -c
  4  i686
  925  noarch
  1  TRANS.TBL
  2311  x86_64

8、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现) ?

答:sed  ‘s/[^[:alpha:]]/\n/g’ /etc/init.d/functions |sed ‘/^$/d’ |sort |uniq -c|sort -n
    grep -oE ‘[[:alpha:]]+’ /etc/init.d/functions |sort |uniq -c |sort -n

原创文章,作者:_xddggg,如若转载,请注明出处:http://www.178linux.com/85163

(0)
_xddggg_xddggg
上一篇 2017-08-20 22:24
下一篇 2017-08-20 23:54

相关推荐

  • 马哥教育网络班21期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别 集线器(HUB)是在OSI模型的第一层——物理层——连接多台主机、延长网络的设备。其主要功能是将从一个端口接收到的数据包转发给所有端口。中继器(Repeater)是将由电缆传过来的电信号或光信号调整波形和放大再传给另一个电缆的设备,提供多端口服务的中继器称作集线器。二者的主要区别是…

    Linux干货 2016-08-29
  • Cobbler实现多系统自动化安装

    Cobbler介绍:  Cobbler能够快速建立多系统同时安装的网络系统安装环境;传统的pxe+dhcp+tftp+kickstart仅能够提供单一系统安装,功能过于简单;如果遇到安装不同操作系统时就遇到瓶颈;而cobbler正好解决了这一问题。Cobbler是增强版的网络系统安装。 Cobbler由不同的组件配合完成系统安装,各组件之间配合如下…

    Linux干货 2015-08-11
  • 马哥linux 0801作业

    将/etc/issue文件中的内容转换为大写后保存至/tmp/issue.out文件中 2.将当前系统登录用户的信息转换为大写后保存至/tmp/who.out文件中 3.一个linux用户给root发邮件,要求邮件标题为"help",邮件正文如下: Hello,I am 用户名,the system version is here,ple…

    Linux干货 2016-08-04
  • 如何理解云计算中IaaS、PaaS和SaaS?很简单,就像吃货想吃披萨了…

                                                      &nbsp…

    2015-04-17
  • N28-第三周

    1. 列出當前系統上所有已經登入的用戶的用戶名,注意:同一個用戶登入多次,則只顯示一次即可。
    2. 取出最後登入到當前系統的用戶的相關信息。
    3. 取出當前系統上被用戶當做其默認shell的最多的那個shell。
    4. 將/etc/passwd中的第三個字段數值最大的後10個用戶的信息全部改為大寫後保存至/tmp/maxusers.txt文件中。
    5. 取出當前主機的IP地址,提示:對ifconfig命令的結果進行切分。
    6. 列出/etc目錄下所有以.conf結尾的文件的文件名,並將其名字轉換為大寫後保存至/tmp/etc.conf文件中。
    7. 顯示/var目錄下一級子目錄或文件的總各數。
    8. 取出/etc/group文件中第三個字段數值最小的10個組的名字。
    9. 將/etc/fstab和/etc/issue文件的內容合併為同一個內容後保存至/tmp/etc.test文件中。
    10. 請總結描述用戶和組管理類命令的使用方法並完成以下練習:
    (1) 創建組distro,其GID為2016。
    (2) 創建用戶mandriva,其ID號為1005,基本組為distro。
    (3) 創建用戶mageia,其ID號為1100,家目錄為/home/linux。
    (4) 給用戶mageia添加密碼,密碼為mageedu。
    (5) 刪除mandriva,但保留其家目錄。
    (6) 創建用戶slackware,其ID號為2002,基本組為distro,附加組peguin。
    (7) 修改slackware的默認shell為/bin/tcsh。
    (8) 為用戶slackware新增附加組admins。

    2017-12-19
  • 如何安装VMware Workstation

    1、打开安装包,直接点击“下一步” 2、选择接受条款,单击“下一步” 3、选择安装路径,单击“下一步” 4、单击“下一步”,也可以勾选掉两个选项   5、单击“下一步”   6、点击“安装”   7、完成安装  

    2017-07-11