精华内容
下载资源
问答
  • shell sed

    千次阅读 2018-08-27 23:50:33
    在编写shell脚本的过程中,经常需要使用sed流编辑器和awk对文本文件进行处理。 一、什么是sed?  sed 是一种在线编辑器,它一次处理一行内容。sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存...

    在编写shell脚本的过程中,经常需要使用sed流编辑器和awk对文本文件进行处理。

    一、什么是sed?

        sed 是一种在线编辑器,它一次处理一行内容。sed是非交互式的编辑器。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。

    二、sed的处理过程

        sed编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行

       前面说到sed不会修改文件,那么现在我们可以知道是为什么了?是因为sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

    补充知识:

        在使用sed的过程中,我们经常会听到“定址”,那么什么是“定址”呢?

        定址用于决定对哪些行进行编辑。地址的形式可以是数字、正则表达式、或二者的结合。如果没有指定地址,sed将处理输入文件的所有行。

    1、地址是一个数字,则表示行号;是“$"符号,则表示最后一行。

    sed -n '3p' datafile   #只打印第三行
    # -n:取消默认打印设置(打印全部行),p:打印 
    

    2、只显示指定行范围的文件内容

    sed -n '100,200p' mysql_slow_query.log  #只查看文件的第100行到第200行  
    # -n:取消默认打印设置(打印全部行)
    

    3、地址是逗号分隔的,那么需要处理的地址是这两行之间的范围(包括这两行在内)。范围可以用数字、正则表达式、或二者的组合表示。

    sed '2,5d' datafile  
    #d:删除,删除第二到第五行  
      
    sed '/My/,/You/d' datafile  
    #删除包含"My"的行到包含"You"的行之间的行  
      
    sed '/My/,10d' datafile  
    #删除包含"My"的行到第十行的内容  

     

    三、sed命令和选项

    sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定地址则处理所有的输入行。

    1、sed命令

     命令

     功能

     a\

     在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行

     c\

     用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用"\"续行

     i\

     在当前行之前插入文本。多行时除最后一行外,每行末尾需用"\"续行

     d

     删除行

     h

     把模式空间里的内容复制到暂存缓冲区

     H

     把模式空间里的内容追加到暂存缓冲区

     g

     把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容

     G

     把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面

     l

     列出非打印字符

     p

     打印行

     n

     读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理

     q

     结束或退出sed

     r

     从文件中读取输入行

     !

     对所选行以外的所有行应用命令

     s

     用一个字符串替换另一个

     g

     在行内进行全局替换

     w

     将所选的行写入文件

     x

     交换暂存缓冲区与模式空间的内容

     y

     将字符替换为另一字符(不能对正则表达式使用y命令)

    2、sed选项

     选项

     功能

     -e

     进行多项编辑,即对输入行应用多条sed命令时使用

      -i

    直接在原文件上进行操作 

     -n

     取消默认的输出

     -f

     指定sed脚本的文件名

    四、正则表达式元字符

       4.1 与grep一样,sed也支持特殊元字符(默认正斜杠线“/”),模式查找、替换。不同的是,sed使用的正则表达式是括在斜杠线"/"之间的模式。

        如果要把正则表达式分隔符"/"改为另一个字符,比如o,只要在这个字符前加一个反斜线,在字符后跟上正则表达式,再跟上这个字符即可。

    sed -n '\o^Myop' datafile  
    

    4.2 常用的正则表达式如下:

     元字符

     功能

     示例

     ^

     行首定位符

     /^my/ 匹配所有以my开头的行

     $

     行尾定位符

     /my$/ 匹配所有以my结尾的行

     .

     匹配除换行符以外的单个字符

     /m..y/ 匹配包含字母m,后跟两个任意字符,再跟字母y的行

     *

     匹配零个或多个前导字符

     /my*/ 匹配包含字母m,后跟零个或多个y字母的行

     []

     匹配指定字符组内的任一字符

     /[Mm]y/ 匹配包含My或my的行

     [^]

     匹配不在指定字符组内的任一字符

     /[^Mm]y/ 匹配包含y,但y之前的那个字符不是M或m的行

     ..

     保存已匹配的字符

     1,20s/youself/\1r/ 标记元字符之间的模式,并将其保存为标签1,之后可以使用\1来引用它。最多可以定义9个标签,从左边开始编号,最左边的是第一个。此例中,对第1到第20行进行处理,you被保存为标签1,如果发现youself,则替换为your。

     &

     保存查找串以便在替换串中引用

     s/my/**&**/  符号&代表查找串。my将被替换为**my**

     \<

     词首定位符

     /\<my/ 匹配包含以my开头的单词的行

     \>

     词尾定位符

     /my\>/ 匹配包含以my结尾的单词的行

     x\{m\}

     连续m个x

     /9\{5\}/匹配包含连续5个9的行

     x\{m,\}

     至少m个x

     /9\{5,\}/ 匹配包含至少连续5个9的行

     x\{m,n\}

     至少m个,但不超过n个x

     /9\{5,7\}/ 匹配包含连续5到7个9的行

    五、sed的退出状态

        sed不向grep一样,不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0。

    六、常用范例

    1、p命令

        命令p用于显示模式空间的内容。默认情况下,sed把输入行打印在屏幕上,选项-n用于取消默认的打印操作。当选项-n和命令p同时出现时,sed可打印选定的内容

    (1)sed '/my/p' datafile  
    #默认情况下,sed把所有输入行都打印在标准输出上。如果某行匹配模式my,p命令将把该行另外打印一遍(匹配航紧挨着打印两遍)。  
      
    (2)sed -n '/my/p' datafile  
    #选项-n取消sed默认的打印,p命令把匹配模式my的行打印一遍。  
    

    2、d命令

        命令d用于删除输入行。sed先将输入行从文件复制到模式空间里,然后对该行执行sed命令,最后将模式空间里的内容显示在屏幕上。如果发出的是命令d,当前模式空间里的输入行会被删除,不被显示。

    (1)sed '$d' datafile  
    #删除最后一行,其余的都被显示  
      
    (2)sed '/my/d' datafile  
    #删除包含my的行,其余的都被显示   
    

    3、替换:s命令和全局:g命令

    sed 's/^My/You/g' datafile  
    #命令末端的g表示在行内进行全局替换,处理以My开头的行,把行内所有的My替换为You。  
      
    (2)sed -n '1,20s/My$/You/gp' datafile  
    #取消默认输出,处理1到20行里匹配以My结尾的行,把行内所有的My替换为You,并打印到屏幕上。  
      
    (3)sed 's#My#Your#g' datafile  
    #紧跟在s命令后的字符就是查找串和替换串之间的分隔符。分隔符默认为正斜杠,但可以改变。无论什么字符(换行符、反斜线除外),只要紧跟s命令,就成了新的串分隔符。  
    

    4、e选项

       -e是编辑命令,用于sed执行多个编辑任务的情况下。在下一行开始编辑前,所有的编辑动作将应用到模式缓冲区中的行上。

    sed -e '1,10d' -e 's/My/Your/g' datafile  
    #选项-e用于进行多重编辑。第一重编辑删除第1-3行。第二重编辑将出现的所有My替换为Your。
    #因为是逐行进行这两项编辑(即这两个命令都在模式空间的当前行上执行),所以编辑命令的顺序会影响结果。  
    

    5、r命令

    r命令是读命令。sed使用该命令将一个文本文件中的内容加到当前文件的特定位置上。

    sed '/My/r introduce.txt' datafile  
    #如果在文件datafile的某一行匹配到模式My,就在该行后读入文件introduce.txt的内容。如果出现My的行不止一行,则在出现My的各行后都读入introduce.txt文件的内容。  
    

    6、w命令

    sed -n '/hrwang/w me.txt' datafile  

    7、a\ 命令

        a\ 命令是追加命令,追加将添加新文本到文件中当前行(即读入模式缓冲区中的行)的后面。所追加的文本行位于sed命令的下方另起一行。如果要追加的内容超过一行,则每一行都必须以反斜线结束,最后一行除外。最后一行将以引号和文件名结束。

    sed '/^hrwang/a\  
    >hrwang and mjfan are husband\  
    >and wife' datafile  
    #如果在datafile文件中发现匹配以hrwang开头的行,则在该行下面追加hrwang and mjfan are husband and wife  

    8、i\ 命令

    i\ 命令是在当前行的前面插入新的文本。

    9、c\ 命令

    sed使用该命令将已有文本修改成新的文本。

    10、n命令

    sed使用该命令获取输入文件的下一行,并将其读入到模式缓冲区中,任何sed命令都将应用到匹配行紧接着的下一行上。

    sed '/hrwang/{n;s/My/Your/;}' datafile  

    注:如果需要使用多条命令,或者需要在某个地址范围内嵌套地址,就必须用花括号将命令括起来,每行只写一条命令,或这用分号分割同一行中的多条命令。

    11、y命令

        该命令与UNIX/Linux中的tr命令类似,字符按照一对一的方式从左到右进行转换。例如,y/abc/ABC/将把所有小写的a转换成A,小写的b转换成B,小写的c转换成C。

    sed '1,20y/hrwang12/HRWANG^$/' datafile  
    #将1到20行内,所有的小写hrwang转换成大写,将1转换成^,将2转换成$。  
    #正则表达式元字符对y命令不起作用。与s命令的分隔符一样,斜线可以被替换成其它的字符。  
    

    12、q命令

        q命令将导致sed程序退出,不再进行其它的处理。
     

    sed '/hrwang/{s/hrwang/HRWANG/;q;}' datafile  

    13、h命令和g命令

    为了更好说明这两个命令,我们先创建如下的文本文件:

    #cat datafile  
    My name is hrwang.  
    Your name is mjfan.  
    hrwang is mjfan's husband.  
    mjfan is hrwang's wife.  
    sed -e '/hrwang/h' -e '$G' datafile  
    sed -e '/hrwang/H' -e '$G' datafile  
    #通过上面两条命令,你会发现h会把原来暂存缓冲区的内容清除,只保存最近一次执行h时保存进去的模式空间的内容。而H命令则把每次匹配hrwnag的行都追加保存在暂存缓冲区。  
    sed -e '/hrwang/H' -e '$g' datafile  
    sed -e '/hrwang/H' -e '$G' datafile  
    #通过上面两条命令,你会发现g把暂存缓冲区中的内容替换掉了模式空间中当前行的内容,此处即替换了最后一行。而G命令则把暂存缓冲区的内容追加到了模式空间的当前行后。此处即追加到了末尾。  

    补充知识点:sed特殊用法

    sed -n '/root/w a.txt'    #将匹配行输出到文件  
    sed '/root/r abc.txt' /etc/passwd #把abc.txt的文件内容读入到root匹配行后  
    sed -n '/root/w a.txt'  
    sed -n '/root/{=;p}' /etc/passwd #打印行号和匹配root的行  
    sed -n '/root/{n;d}' /etc/passwd #将匹配root行的下一行删除  
    sed -n '/root/{N;d}' /etc/passwd #将匹配root行和下一行都删除  
    sed '22{h;d};23,33{H;d};44G' pass  

    七、sed脚本编写方法

    1、从文件读入命令

    sed -f sed.sh  

    sed.sh文件内容:

    s/root/yerik/p  
    s/bash/csh/p 

    2、直接运行脚本 ./sed.sh /etc/passwd
     

    #!/bib/sed -f  
    s/root/yerik/p  
    s/bash/csh/p  
    
    

    八、小技巧

    1、用sed 输出自己的IP 地址

    ifconfig eth0 |sed '2p' |sed 's/^.*addr:/ /g' |sed 's/B.*$ / /g'  

    2、在sed的命令行中引用shell变量时要使用双引号,而不是通常所用的单引号。下面是一个根据name变量的内容来删除named.conf文件中zone段的脚本:

    name='zone\ "localhost"'

    sed "/$name/,/};/d" named.conf   

    3、保持和获取:h命令和G命令

    $ sed -e '/test/h' -e '$G example  

    在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。

     

    4、保持和互换:h命令和x命令

    $ sed -e '/test/h' -e '/check/x' example   

     互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。

    九、练习

    1,删除文件每行的第一个字符。

    sed -n 's/^.//gp' /etc/passwd  
    sed -nr 's/(.)(.*)/\2/p' /etc/passwd  
    

    2,删除文件每行的第二个字符。

    sed -nr 's/(.)(.)(.*)/\1\3/p' /etc/passwd  
    
    

    3,删除文件每行的最后一个字符。

    sed -nr 's/.$//p' /etc/passwd  
    sed -nr 's/(.*)(.)/\1/p' /etc/passwd  

    4,删除文件每行的倒数第二个字符。

    sed -nr 's/(.*)(.)(.)/\1\3/p' /etc/passwd  

    5,删除文件每行的第二个单词。

    sed -nr 's/([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)/\1\2\3\5/p' /etc/passwd  

    6,删除文件每行的倒数第二个单词。

    sed -nr 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4\5\6/p' /etc/samba/smb.conf  

    7,删除文件每行的最后一个单词。

    sed -nr 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4/p' /etc/samba/smb.conf  

    8,交换每行的第一个字符和第二个字符。

    sed -nr 's/(.)(.)(.*)/\2\1\3/p' /etc/passwd  

    9,交换每行的第一个单词和第二个单词。

    sed -nr 's/([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)/\1\4\3\2\5/p' /etc/samba/smb.conf 

    10,交换每行的第一个单词和最后一个单词。

    sed -nr 's/([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)/\1\4\3\2\5/p' /etc/passwd  

    11,删除一个文件中所有的数字。

    sed 's/[0-9]*//g' /etc/passwd  

    12,删除每行开头的所有空格。

    sed -n 's/^\ *//p' /etc/samba/smb.conf   
    sed -nr 's/( *)(.*)/\2/p' testp  

    13,用制表符替换文件中出现的所有空格。

    sed -n 's/\ /\t/gp' pass   

    14,把所有大写字母用括号()括起来。

    sed -nr 's/([A-Z])/(&)/gp' testp   
    sed -n 's/[A-Z]/(&)/gp' testp  

    15,打印每行3次。

    sed 'p;p' pass  

    16,隔行删除。

    sed -n '1~2p' pass  

    17,把文件从第22行到第33行复制到第44行后面。

    sed '1,21h;22h;23,33H;44G' pass  

    18,把文件从第22行到第33行移动到第44行后面。

    sed '22{h;d};23,33{H;d};44G' pass  

    19,只显示每行的第一个单词。

    sed -nr 's/([^a-Z]*)([a-Z]+)([^a-Z]+)(.*)/\2/p' /etc/passwd  

    20,打印每行的第一个单词和第三个单词。

    sed -nr 's/([^a-Z]*)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)(.*)/\2--\4/p' /etc/passwd  

    21,将格式为    mm/yy/dd    的日期格式换成   mm;yy;dd

    date +%m/%Y/%d |sed -n 's#/#;#gp'  

    22, 逆向输出

    cat a.txt  
    ABC  
    DEF  
    XYZ  
    输出样式变成  
    XYZ  
    DEF  
    ABC

    23,mac上执行sed的编辑 -i命令报错sed: 1: "test.txt": undefined label ‘est.txt’或sed: 1: "2a\test\": extra characters after \ at the end of a command

    问题一

    sed -i 's/a/b/g' test.txt
    报错:sed: 1: "test.txt": undefined label 'est.txt'

    解决方案:增加一个备份的追加名

    sed -i '.bak' 's/a/b/g' test.txt

    原因:mac强制要求备份,否则报错

    当然可以不使用其他备份名字,只是用’',就可以只保留一份

    sed -i ‘’ ’s/a/b/g’ test.txt

    问题二

    sed追加命令:匹配到a字符后追加xxx内容

    sed -i '' "/a/a\xxx" test.txt

    报错:

    sed: 1: "2a\test\": extra characters after \ at the end of a command

    解决方案:在追加内容前换行,且要用双斜杠\\

    但是这又有一个新的问题,追加的内容是显示在下一行的前面,没有独立占据一行

    sed -i '' "/a/a\\
    xxx" test.txt
    

    使用\\n啊\n什么的都无效,其实只要在字符串后面直接输入\\然后回车换行就有效了,如下图所示。

    备注:在某一行前插入用/i,例如在匹配到a的前面一行加入yyy

    sed -i '' "/a/i\\
    xxx" test.txt
    
    

    mac上的sed -n之类的与linux系统上使用方法一样

    24,替换文本内容

    #1、将当前目录下包含jack串的文件中,jack字符串替换为tom
    sed -i "s/jack/tom/g" `grep "jack" -rl ./`
    #2、将某个文件中的jack字符串替换为tom
    sed -i "s/jack/tom/g" test.txt

     

    展开全文
  • shell sed 详述

    2011-09-23 08:02:16
    shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述shell sed 详述...
  • shell sed过滤器详解

    千次阅读 2019-05-04 16:30:48
    shell sed过滤器详解
                   
    1. Sed简介
    sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。
    2. 定址
    可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的 那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定。
    3. Sed命令
    调用sed命令有两种形式:
    *
    sed [options] 'command' file(s)
    *
    sed [options] -f scriptfile file(s)
    a\
    在当前行后面加入一行文本。
    b lable
    分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
    c\
    用新的文本改变本行的文本。
    d
    从模板块(Pattern space)位置删除行。
    D
    删除模板块的第一行。
    i\
    在当前行上面插入文本。
    h
    拷贝模板块的内容到内存中的缓冲区。
    H
    追加模板块的内容到内存中的缓冲区
    g
    获得内存缓冲区的内容,并替代当前模板块中的文本。
    G
    获得内存缓冲区的内容,并追加到当前模板块文本的后面。
    l
    列表不能打印字符的清单。
    n
    读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
    N
    追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
    p
    打印模板块的行。
    P(大写)
    打印模板块的第一行。
    q
    退出Sed。
    r file
    从file中读行。
    t label
    if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
    T label
    错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
    w file
    写并追加模板块到file末尾。
    W file
    写并追加模板块的第一行到file末尾。
    !
    表示后面的命令对所有没有被选定的行发生作用。
    s/re/string
    用string替换正则表达式re。
    =
    打印当前行号码。
    #
    把注释扩展到下一个换行符以前。
    以下的是替换标记
    *
    g表示行内全面替换。
    *
    p表示打印行。
    *
    w表示把行写入一个文件。
    *
    x表示互换模板块中的文本和缓冲区中的文本。
    *
    y表示把一个字符翻译为另外的字符(但是不用于正则表达式)
    (可以转换字母大小写,但tr更方便)
     
    4. 选项
    -e command, --expression=command
    允许多台编辑。
    -h, --help
    打印帮助,并显示bug列表的地址。
    -n, --quiet, --silent
    取消默认输出。
    -f, --filer=script-file
    引导sed脚本文件名。
    -V, --version
    打印版本和版权信息。
    5. 元字符集^
    锚定行的开始如:/^sed/匹配所有以sed开头的行。
    $
    锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
    .
    匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。
    *
    匹配零或多个字符 如:,love这成**love**。
    \<
    锚定单词的开始,如:/\<love/匹配包含以love开头的单词的行。
    \>
    锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
    x\{m\}
    重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
    x\{m,\}
    重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
    x\{m,n\}
    重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。
    6. 实例
    删除:d命令
    *
    $ sed '2d' example-----删除example文件的第二行。
    *
    $ sed '2,$d' example-----删除example文件的第二行到末尾所有行。
    *
    $ sed '$d' example-----删除example文件的最后一行。
    *
    $ sed '/test/'d example-----删除example文件所有包含test的行。
    替换:s命令
    *
    $ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
    *
    $ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印 它。
    *
    $ sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost。
    *
    $ sed -n 's/love love
    able/\1rs/p' example-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。
    *
    $ sed 's#10#100#g' example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替 换成100。
    选定行的范围:逗号
    *
    $ sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。
    *
    $ sed -n '5,/^test/p' example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。
    *
    $ sed '/test/,/check/s/$/sed test/' example-----对于模板test和west之间的行,每行的末尾用字符串sed test替换。
    多点编辑:e命令
    *
    $ sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
    *
    $ sed --expression='s/test/check/' --expression='/love/d' example-----一个比-e更好的命令是--expression。它能给sed表达式赋值。
    从文件读入:r命令
    *
    $ sed '/test/r file' example-----file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。
    写入文件:w命令
    *
    $ sed -n '/test/w file' example-----在example中所有包含test的行都被写入file里。
    追加命令:a命令
    *
    $ sed '/^test/a\\--->this is a example' example<-----'this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。
    插入:i命令
    $ sed '/test/i\\
    new line
    -------------------------' example
    如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。
    下一个:n命令
    *
    $ sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。
    变形:y命令
    *
    $ sed '1,10y/abcde/ABCDE/' example-----把1--10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个 命令。
    退出:q命令
    *
    $ sed '10q' example-----打印完第10行后,退出sed。
    保持和获取:h命令和G命令
    *
    $ sed -e '/test/h' -e '$G example-----在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保 持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中 的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。
    保持和互换:h命令和x命令
    *
    $ sed -e '/test/h' -e '/check/x' example -----互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。
    7. 脚本
    Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末 尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。
    ===================

    linux tr 命令详解(转换字母大小写更方便)

    1、关于tr
       通过使用 tr,您可以非常容易地实现 sed 的许多最基本功能。您可以将 tr 看作为 sed 的(极其)简化的变体:它可以用一个字符来替换另一个字符,或者可以完全除去一些字符。您也可以用它来除去重复字符。这就是所有 tr 所能够做的。
           tr用来从标准输入中通过替换或删除操作进行字符转换。tr主要用于删除文件中控制字符或进行字符转换。使用tr时要转换两个字符串:字符串1用于查询, 字符串2用于处理各种转换。tr刚执行时,字符串1中的字符被映射到字符串2中的字符,然后转换操作开始。
    带有最常用选项的tr命令格式为:
    tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-file
    这里:
    -c 用字符串1中字符集的补集替换此字符集,要求字符集为ASCII。
    -d 删除字符串1中所有输入字符。
    -s 删除所有重复出现字符序列,只保留第一个;即将重复出现字符串压缩为一个字符串。
    input-file是转换文件名。虽然可以使用其他格式输入,但这种格式最常用。
    2、字符范围
    指定字符串1或字符串2的内容时,只能使用单字符或字符串范围或列表。
    [a-z] a-z内的字符组成的字符串。
    [A-Z] A-Z内的字符组成的字符串。
    [0-9] 数字串。
    \octal 一个三位的八进制数,对应有效的ASCII字符。
    [O*n] 表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串。
    tr中特定控制字符的不同表达方式
    速记符含义八进制方式
    \a Ctrl-G  铃声\007
    \b Ctrl-H  退格符\010
    \f Ctrl-L  走行换页\014
    \n Ctrl-J  新行\012
    \r Ctrl-M  回车\015
    \t Ctrl-I  tab键\011
    \v Ctrl-X  \030
    3、应用例子
    (1)去除oops.txt里面的重复的小写字符
    tr -s "[a-z]"<oops.txt >result.txt
    (2)删除空行
    tr -s "[\012]" < plan.txt 或 tr -s ["\n"] < plan.txt
    (3)有时需要删除文件中的^M,并代之以换行
    tr -s "[\015]" "[\n]" < file 或 tr -s "[\r]" "[\n]" < file
    (4)大写到小写
    cat a.txt |tr "[a-z]" "[A-Z]" >b.txt
    (5)删除指定字符
        一个星期的日程表。任务是从其中删除所有数字,只保留日期。日期有大写,也有小写格式。因此需指定两个字符范围[a-z]和[A-Z],命令tr -cs "[a-z][A-Z]" "[\012*]" 将文件每行所有不包含在[a-z]或[A-Z](所有希腊字母)的字符串放在字符串1中并转换为一新行。-s选项表明压缩所有新行, -c表明保留所有字母不动。原文件如下,后跟tr命令:
    tr -cs "[a-z][A-Z]" "[\012*]" <diary.txt
    (6)转换控制字符
        tr的第一个功能就是转换控制字符,特别是从dos向UNIX下载文件时,忘记设置ftp关于回车换行转换的选项时更是如此。cat -v filename 显示控制字符。
        cat -v stat.txt
        box aa^^^^^12^M
        apple bbas^^^^23^M
        ^Z
    猜想‘^ ^ ^ ^ ^ ^’是tab键。每一行以Ctrl-M结尾,文件结尾Ctrl-Z,以下是改动方法。
    使用-s选项,查看ASCII表。^的八进制代码是136,^M是015,tab键是011,^Z是032 ,下面将按步骤完成最终功能。
    用tab键替换^ ^ ^ ^ ^ ^,命令为"\136" "[\011*]"。将结果重定向到临时工作文件stat.tmp
    tr -s "[\136]" "[\011*]" <stat.txt >stat.tmp
    用新行替换每行末尾的^M,并用\n去除^Z,输入要来自于临时工作文件stat.tmp。
    tr -s "[\015][\032]" "\n" <stat.tmp
    要删除所有的tab键,代之以空格,使用命令
    tr -s "[\011]" "[\040*]" <input.file
    (7)替换passwd文件中所有冒号,代之以tab键,可以增加可读性
    tr -s "[:]" "[\011]" < /etc/passwd 或 tr -s "[:]" "[\t]" < /etc/passwd
    (8)使路径具有可读性
        如果用 echo $PATH 或者 echo $LD_LIBRARY_PATH 等类似的命令来显示路径信息的话,我们看到的将会是一大堆用冒号连接在一起的路径, tr命令可以把这些冒号转换为回车,这样,这些路径就具有很好的可读性了
    echo $PATH | tr ":" "\n"
    (9)可以在vi内使用所有这些命令!只要记住:在tr命令前要加上您希望处理的行范围和感叹号 (!),如 1,$!tr -d '\t'(美元符号表示最后一行)。
    (10)另外,当有人给您发送了一个在 Mac OS 或 DOS/Windows 机器上创建的文本文件时,您会发现tr非常有用。
        如果没有将文件保存为使用  UNIX 换行符来表示行结束这种格式,则需要将这样的文件转换成本机 UNIX 格式,否则一些命令实用程序不会正确地处理这些文件。Mac OS  的行尾以回车字符(\r)结束,许多文本处理工具将这样的文件作为一行来处理。为了纠正这个问题,可以用下列技巧:
    Mac -> UNIX:tr "\r" "\n"<macfile > unixfile
    UNIX -> Mac:tr "\n" "\r"<unixfile > macfile
    Microsoft DOS/Windows 约定,文本的每行以回车字符(\r)并后跟换行符(\n)结束。为了纠正这个问题,可以使用下列命令:
    DOS -> UNIX:tr -d "\r"<dosfile > unixfile
    UNIX -> DOS:在这种情况下,需要用awk,因为tr不能插入两个字符来替换一个字符。要使用的 awk 命令为 awk '{ print $0"\r" }'<unixfile > dosfile
    注:都可以用sed 来完成。
               
    展开全文
  • Shell sed命令

    千次阅读 2019-07-19 18:05:00
    遇到sed问题,经常会去查资料,这里自己记录一下,方便以后查询。 sed(流编辑器)命令行文本编辑器。它一次处理一行内容,先把处理的行存入临时缓冲区(模式空间)进行处理,用sed命令处理缓冲区内容后输出到屏幕...

    遇到sed问题,经常会去查资料,这里自己记录一下,方便以后查询。

    sed(流编辑器)命令行文本编辑器。它一次处理一行内容,先把处理的行存入临时缓冲区(模式空间)进行处理,用sed命令处理缓冲区内容后输出到屏幕。能同时处理多个文件多行的内容,不改变原文件内容。最常用的是模式匹配和替换操作。

    官网文档

     

    命令格式 

    sed [选项]... {脚本} [输入文件]...
    sed [option] 'command' file
    sed [option] scriptfile file

    选项说明

    选项 完整含义 说明
    -n --quiet, --silent 取消自动打印,只输出sed处理的行
    -e 脚本 --expression=脚本 添加“脚本”到程序的运行列表,允许对输入数据应用多条sed命令编辑
    -f 脚本文件 --file=脚本文件 添加“脚本文件”到程序的运行列表
    -l N --line-length=N 指定“l”命令的换行长度
    -r 或 -E --regexp-extended 在脚本中使用扩展正则表达式
    -s --separate 将输入文件视为各个独立的文件而不是一个长的连续输入
    -u --unbuffered 从输入文件读取最少的数据,更频繁的刷新输出
    -i --in-place[=SUFFIX] 直接编辑源文件,而不是由屏幕输出。如果有后缀则备份
    --help   打印帮助并退出
    --version   输出版本信息并退出

    退出码

    编码 解释
    0 执行完成
    1 错误命令、错误语法、错误正则表达式、使用了posix扩展命令
    2 部分文件无法打开(文件不存在、权限),其他文件继续处理
    4

    I/O错误、运行时错误

    命令

    命令 说明
    a\ text  /  a text(替代) 追加,在行末追加文本
    b label 跳转到标签位置
    c text 行替换,用c后面的字符串替换原数据行
    d  /  D 删除行 / 删除模式空间第一行
    ee command 执行命令并替换模式空间内容
    F 打印文件名
    g / G 替换 / 追加 当前模式空间内容为内存缓冲区内容
    h / H 拷贝 / 追加 当前模式空间内容到内存中的缓冲区
    i text 插入,在行首插入文本
    l 列表打印模式空间内容
    n / N 读取 / 追加下一行
    p / P 打印匹配行
    q[exit-code] / Q[exit-code] 退出sed
    r filename / R filename 从文件中读入文本
    s/regexp/replacement/[flags] 字符串替换,格式:"行范围 s/旧字串/新字串/g",不加g只替换每行第一个匹配的串
    t label / T label 读取条件成功 / 失败后跳转到标签位置,标签可省略
    w filename / W filename 将匹配内容 / 第一行写入到文件
    x 交换模式空间和内存缓冲区内容
    y/src/dst/ 替换单个字符
    z 清除模式空间内容
    # 注释,到换行符之前
    { cmd ; cmd ... } 多个执行命令,分号分隔
    = 显示匹配行的行号
    label 指定跳转标签位置

    s替换标记[flags]

    编码 解释
    g 替换全部
    number 只替换number行
    p 如果替换则打印
    w

    将替换的结果写入文件

    \l 子串匹配

    扩展正则表达式

    ^

    匹配行开始,如:/^sed/匹配所有以sed开头的行。

    $

    匹配行结束,如:/sed$/匹配所有以sed结尾的行。

    ^$

    空白行

    .

    匹配任意单个非换行符字符

    *

    匹配相邻的字符任意次(0或多个)

    .*

    匹配任意长度的任意字符

    \?

    匹配紧挨在前面的字符0次或1次

    x{m}

    匹配重复字符x,m次,如:/0{5}/匹配包含5个0的行
    x{m,}

    匹配重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行

    x{m,n}

    匹配重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行

    <

    匹配单词的开始,如:/<love/匹配包含以love开头的单词的行

    >

    匹配单词的结束,如/love>/匹配包含以love结尾的单词的行

    <pattern>

    匹配单词

    []

    匹配指定范围内的任意单个字符,如/[sS]ed/匹配sed和Sed

    [^]

    匹配不在指定范围内的任意单个字符

    () 匹配子串,保存匹配的字符,如s/(love)able/\1rs,loveable被替换成lovers。

    [:digit:]

    所有数字, 相当于0-9, [0-9]= [[:digit:]]

    [:lower:]

    所有的小写字母

    [:upper:]

    所有的大写字母

    [:alpha:]

    所有的字母

    [:alnum:]

    相当于0-9a-zA-Z

    [:space:]

    空白字符

    [:punct:]

    所有标点符号

    示例

    1、追加命令:a命令

    sed '/^hello/a\\--->this is a example' sed.txt   
    '--->this is a example'被追加到以hello开头的行(另起一行)后面,sed要求命令a后面有一个反斜杠

    2、整行替换:c命令

    sed '2c hello world' sed.txt   将第二行替换成hello world

    3、删除:d命令

    sed '2d' sed.txt     删除sed.txt文件的第二行
    sed '2,$d' sed.txt   删除sed.txt文件的第二行到末尾所有行
    sed '$d' sed.txt     删除sed.txt文件的最后一行
    sed '/test/d ' sed.txt     删除sed.txt文件所有包含test的行
    sed '/[A-Za-z]/d ' sed.txt   删除sed.txt文件所有包含字母的行

    4、多点编辑:e命令

    sed -e '1,5d' -e 's/hello/hi/' sed.txt      -e允许在同一行里执行多条命令。删除1至5行,并用hello替换hi
    命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果

    sed --expression='s/hello/hi/' --expression='/today/d' sed.txt      一个比-e更好的命令是--expression。它能给sed表达式赋值

    5、插入:i命令

    sed '/will/i\\some thing new -------' sed.txt      如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面

    6、下一个:n命令

    sed '/hello/{n; s/aa/bb/;}' sed.txt     替换下一行的第一个aa
    sed '/hello/{n; s/aa/bb/g;}' sed.txt       替换下一行的全部aa
    如果hello被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。

    7、打印:p命令

    sed -n '2,4p' wc.txt      只打印2,4行

    8、退出:q命令

    sed '10q' sed.txt
    打印完第10行后,退出sed
    同样的写法:
    sed -n '1,10p ' sed.txt

    9、字符串替换:s命令

    sed '/today/,/hello/s/$/www/' sed.txt      对于模板today和hello之间的行,每行的末尾用字符串www替换
    sed '/today/,/hello/s/^/www/' sed.txt      对于模板today和hello之间的行,每行的开头用字符串www替换
    sed '/^[A-Za-z]/s/5/five/g' sed.txt      将以字母开头的行中的数字5替换成five

    sed 's/hello/hi/g' sed.txt       在整行范围内把hello替换为hi。如果没有g标记,则只有每行第一个匹配的hello被替换成hi。
    sed 's/hello/hi/2' sed.txt       只替换每行的第2个hello为hi
    sed 's/hello/hi/2g' sed.txt      只替换每行的第2个以后的hello为hi(包括第2个)
    sed -n 's/^hello/hi/p' sed.txt     -n和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的hello被替换成hi,就打印它
    sed -n '2,4p' sed.txt      打印输出sed.txt中的第2行和第4行
    sed -n 's/hello/&-hi/gp' sed.txt      &符号表示追加一个串到找到的串后
    sed 's/^192.168.0.1/&-localhost/' sed.txt    所有以192.168.0.1开头的行都会被替换成它自已加 -localhost,变成192.168.0.1-localhost
    sed 's/^192.168.0.1/[&]/' sed.txt     表示给IP地址添加中括号

    sed 's#hello#hi#g' sed.txt      把所有hello替换成hi
    不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,"#"在这里是分隔符,代替了默认的"/"分隔符

    sed -n '/today/,/hello/p' sed.txt      所有在第一个today和第一个hello所确定的范围内的行都被打印
    sed -n '5,/^hello/p' sed.txt      打印从第五行开始到第一个包含以hello开始的行之间的所有行
    sed -n '/^hello/,8p' sed.txt      打印从第一个包含以hello开始的行到第8行之间的所有行

    10、从文件读入:r命令

    sed '/hello/r file' sed.txt
    file里的内容被读进来,显示在与hello匹配的行下面,如果匹配多行,则file的内容将显示在所有匹配行的下面

    11、写入文件:w命令

    sed -n '/hello/w file' sed.txt      在sed.txt中所有包含hello的行都被写入file里

    12、()\1...\n 保留

    sed -n 's/\(liu\)jinhe/\1zero/p' sed.txt      liu被标记为\1,所以liu会被保留下来(\1 == liu)
    sed -n 's/\(liu\)jia\(he\)/\1zero\2ss/p' sed.txt      he被标记为\2,所以he也会被保留下来(\2 == he),所以最后的结果就是\1zero\2ss == "liu" + "zero" + "he" + "ss"
    此处:\1代表的是被第一个()包含的内容,\2代表的是被第二个()包含的内容,……
    上面命令的意思就是:被括号包含的字符串会保留下来,然后跟其他的字符串比如zero和ss组成新的字符串liuzerohess

    13、其他

    sed "s/$//;s/ *//g;/^$/d"
    s/$//     $是最后。在每一行后面追加空。 s为搜索,如s/a/b/,搜索a将替换为b,并只替换一次。
    s/ *//g   将空格删除。 g代表搜索到的全部替换。"空格*"即" *"代表多个空格。
    /^$/d     删除空行。

    echo "$HOSTLIST" | sed "s/#.*$//;/^$/d"
    打印HOSTLIST,取出值。删除#开头的和空行。
    s/#.*$//;  #开头的,替换为空。
    /^$/d  删除空行。

    展开全文
  • shell sed使用

    2019-07-31 10:44:47
    格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名 -i 表示inplace edit,就地修改文件 -r 表示搜索子目录 -l 表示输出匹配的文件名 s表示替换,d表示删除 示例:sed -i "s/shan/hua/g" ...

    暂时只搞替代

    格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名

    -i 表示inplace edit,就地修改文件

     -r 表示搜索子目录

     -l 表示输出匹配的文件名
    s表示替换,d表示删除

    示例:sed -i "s/shan/hua/g"  lishan.txt

    把当前目录下lishan.txt里的shan都替换为hua

    展开全文
  • shell sed贪婪匹配

    千次阅读 2019-03-20 16:10:02
    shellsed 利用正则表达式匹配字符串时,默认使用贪婪模式,且只有贪婪模式,没有非贪婪模式。 贪婪模式:匹配最长的字符串,开始尽量早、结束尽量晚 http://blog.chinaunix.net/uid-10540984-id-2954393.html ...
  • shell sed多行文本处理

    千次阅读 2019-06-03 08:03:14
    3.sed多行文本处理 问题 本案例要求使用sed工具来完成下列任务操作: 修改主机名配置文件 修改hosts文件,添加两条映射记录:192.168.4.5 与 svr5.tarena.com、svr5,还有119.75.217.56与www.baidu.com 方案 sed...
  • shell sed用法

    千次阅读 2015-01-08 15:22:44
    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法 sed命令行格式为:  sed [-nefri] ‘command’ 输入...
  • shell sed的用法,sed -e

    千次阅读 2019-06-13 18:24:18
    sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑 1.sed -e 是可以在一行里执行多条命令 sed...
  • linux shell sed 添加空行

    千次阅读 2020-03-25 09:23:07
    一、每行前后添加空行 ...sed'{x;p;x;}'tmp 2.每行后面添加两行空行: sed'G;G'tmp 每行前面添加两行空行: sed'{x;p;x;x;p;x;}'tmp 3.每行后面添加三行空行: sed'G;G;G'tmp 每行前面添加三行空行: ...
  • shell sed 文件修改 环境变量

    千次阅读 2017-10-16 16:15:47
    最近要写一个shell脚本来设定环境变量,过程中遇到一些问题,现记录下来,留给...因为是使用shell脚本实现,为了使脚本能够通用,脚本里面采用了大量的变量,针对变量sed的使用略有变化,以下是我的sed命令 sed -i
  • SHELL sed和gawk

    2015-05-03 21:35:10
    sed编辑器 sed成为流编辑器,跟普通交互式编辑器恰好相反,即在处理文本流之前已经定义好规则。它可以基于命令行或文本处理,它每次从输入中读取一行,用提供的编辑器命令匹配数据,按命令中指定的方式修改流中的...
  • shell sed替换字符串

    千次阅读 2018-12-19 13:29:40
    #Echo “2006-11-21 22:16:30” | sed ‘s/-//g’ | sed ‘s/ //g’ | sed ‘s/://g’ 得到的结果就是:20061121221630
  • Shell sed 替换操作

    千次阅读 2014-12-22 12:22:09
    语法  sed [ -n ] 'editing command ' [ file .....]  sed [ -n ] -e 'editing command ' ..... [ file .....]  sed [ -n ] -f script-file..... [ file .....] 用途  为
  • linux shell sed中使用变量

    千次阅读 2020-03-19 11:43:32
    sed条件中是不认识变量取值的 sed '/$x/d' test 所以要想它能够识别变量 sed "/$x/d/" test 方法简单就是把"单引号"变成"双引号
  • shell sed总结 D指令

    千次阅读 2018-05-10 21:50:17
    1、D指令后不会打印再打印pattern空间的内容eg: data文件内容This is header lineThis is ...一、指令:sed 'N;h;G;p;D' dataThis is header lineThis is first line.This is header lineThis is first line.Thi...
  • shell sed 删除行操作

    千次阅读 2016-03-12 18:04:53
    删除保护字符串'seq2'的行: sed -i '/seq2/d' testr.txt 删除t1.txt文档中每行中 'a2:' 字符串,并输出到t2.txt文档中保存: sed 's/a2\://' t1.txt >t2.txt
  • linux shell sed 删除文件 前几行

    千次阅读 2020-10-24 07:24:52
    sed命令 不加参数i 就只看到结果,没写入a.txt文件,加 参数i 就写入了 如果有不大确定删除效果的,就先不加 参数i 1,删除首行 $ sed -i '1d' a.txt 2,删除前100行 $ sed -i '1,100d' a.txt 3,删除尾行 ...
  • shell sed的用法

    万次阅读 2012-09-10 00:40:56
    Sed命令是linux下的一个非常有用的命令,特别是在shell脚本中经常会使用到他。 熟悉他你会觉得非常有趣哦! 1.sed -n '2'p filename 打印文件的第二行。 2.sed -n '1,3'p filename 打印文件的1到3行 3. ...
  • shell sed实例详解

    千次阅读 2015-01-08 15:43:07
    一、sed (Stream Editor) 1、定位行: sed -n '12,~3p' pass #从第12行开始,直到下一个3的倍数行(12-15行) sed -n '12,+4p' pass #从第12行开始,连续4行(12-16行) sed -n '12~3p' pass #从第12行...
  • 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何...sed 费贪模式匹配: 字符串 fsd=fsd1,anchor=test,depth=4,width=4,files=500
  • shell sed 实现文本替换

    千次阅读 2016-05-07 08:35:37
    sed 替换文本实现 方法1: sed -i 's/被替换的内容/要替换成的内容/' file  方法2: sed 's/被替换的内容/要替换成的内容/g' file > file.out mv file.out file  这里注意: 不能这样做: sed 's/被替换...
  • Shell sed 替换匹配开头字符的行

    万次阅读 2018-08-24 09:55:17
    可以用shell脚本中,加入sed命令来完成新版本号的替换 #首先定义一个新版本号的变量 var="version=6.1.1" sed -i '/^version=/c'$var'' /etc/config.txt i :直接修改读取的文件内容,而不是输出到...
  • 研究了一下午重要成功了,哈哈!下面说下题目中提到的问题 ...3,为了引入shell变量,必须使用双引号(很重要) 4,例子sed -i "s/\#*server[[:space:]]*$1/server $1/g" $2 将 server加若干空格加指定内容 前面的所
  • Shell sed 截取文本段

    千次阅读 2012-06-22 12:29:58
    sed -n '/^start_mark/,/end_mark$/p' text.txt | grep -Ev '(^start_mark|end_mark$)' | cut -f 1,2 通过上述命令,我们完成了截取一段文本,并且还过滤出了所要列的内容。其结果是得到了如下内容: 10 aaaaa 20 ...
  • shell sed修改源文件

    2012-04-23 11:17:11
    sed -i 's /currValue/changeValue/' xxx.xml $ sed 's/pattern/replace_string/g' file 后缀/g意味着sed会替换每一处匹配 sed '/^$/d' file 移除空白行
  • Shell Sed 替换特定行特定字符

    万次阅读 2016-11-29 15:28:58
    参考: ... sed -i '/snd-soc-wmt-fm34/s/^#//' /snd-soc-wmt-fm34/表示匹配含有snd-soc-wmt-fm34字符串的行 可以把snd-soc-wmt-fm34写成 正则表达式。 那么上面那句的意
  • 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.file 在每行的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,671
精华内容 39,068
关键字:

shellsed