zoukankan      html  css  js  c++  java
  • Linux

    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/'
    
  • 相关阅读:
    xxx.app已损坏,打不开.你应该将它移到废纸篓-已解决
    如何培训新进的软件测试人员
    测试Leader,这些你都做到了嘛?
    GitHub无法访问、443 Operation timed out的解决办法
    GitHub使用Personal access token
    运行Windows虚拟机时,风扇狂转的问题
    使用Keras做OCR时报错:ValueError: Tensor Tensor is not an element of this graph
    Windows虚拟机中无法传输Arduino程序的问题
    Python3中遇到UnicodeEncodeError: 'ascii' codec can't encode characters in ordinal not in range(128)
    实际应用中遇到TimedRotatingFileHandler不滚动的问题
  • 原文地址:https://www.cnblogs.com/yisany/p/10400711.html
Copyright © 2011-2022 走看看