zoukankan      html  css  js  c++  java
  • sed命令的用法

    sed命令的详细学习:

    Sed的常用选项:

    -n:只显示sed匹配到的行。其余行不显示。

    -i :可以直接操作原文件。默认情况下sed不会改变原文件,但是-i选项可以修改原文件,此选项应慎用。

    -r:可以使用标准正则表达式。默认情况下sed只支持基本正则表达式,但是加上-r选项后则支持扩展正则表达式

    -e:多脚本共用。可以同时执行多个命令。

     

     

    常见的用法(格式):

    替换操作:s命令

    sed -e 's/原来的内容/要替换的内容/g' 文件名 

    sed -i 's/原来的内容/要替换的内容/g'  文件名 

    追加操作:a命令(追加的指定内容的后面)
    在第一行的后面追加一行
    sed -i 1axiaochao x.txt

    在每行的头添加字符,比如"HEAD",命令如下:

    sed 's/^/HEAD&/g' test.file

    在每行的行尾添加字符,比如“TAIL”,命令如下:

    sed 's/$/&TAIL/g' test.file

    1."^"代表行首,"$"代表行尾

    2.'s/$/&TAIL/g'
    s代表替换字符串,(c代表替换整行)
    g代表每行出现的字符全部替换(如果想在特定字符处添加,g就有用了,否则只会替换每行第一个,而不继续往后找了)
    加上g跟不加g的区别:
     
    加上-i跟不加-i的区别:
     

    sed -n 's/root/ROOT/p' sed.txt                          sed替换结合-n选项和p命令,只显示改动过的行


    sed -i '$a要插入的文字' file.txt                   在文件的结尾插入一行文字

    sed -i '1 ised command start' myfile                  行首添加一行
    sed -i '$a sed command end' myfile                   行尾追加一行
    sed -e '14s/yes/no/g'  /etc/xinetd.d/tftp               将此文件的14行的yes换成no

     

    sed -e 's/^/#/g' php_install.sh     将 每行开头都添加上#号

    删除操作:d命令

    1.删除空白行

    sed '/^$/d' passwd.txt == sed -i '/^$/d' passwd.txt

    sed -e '/^$/'d passwd.txt(d放‘ ’外边也可以)

    sed -e '/^$/d' passwd.txt

    cat passwd.txt|grep -v "^$")此命令也可以

    2.删除文件第二行

    sed -e '2d' passwd.txt

    3.删除文件第3行到末尾(包括第三行)

    sed -e '3,$d' passwd.txt

    sed -i '2,$d' x.txt 

    4.删除文件的最后一行

    sed -e '$d' passwd.txt

    5.删除文件中所有以oldboy开头的行

    sed -e '/^oldboy/'d passwd.txt

    6.删除文件中所有以nologin结尾的行

    sed -e '/nologin$/'d passwd.txt

    7.删除文件中以o开头的行

    sed -e '/^o,*/d' passwd.txt

    8.删除文件中以n结尾的行

    sed -e '/n,*$/d' passwd.txt

    9.删除第1行到第44行

    sed -e '1,44d' passwd.txt

     

     sed命令升华:

    ^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。 $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。 . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。 * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。 [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 (..) 匹配子串,保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers。 & 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 < 匹配单词的开始,如:/ 匹配单词的结束,如/love>/匹配包含以love结尾的单词的行。 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的行。

    来自: http://man.linuxde.net/sed
    ^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。 $ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。 . 匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。 * 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 [] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。 [^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 (..) 匹配子串,保存匹配的字符,如s/(love)able/1rs,loveable被替换成lovers。 & 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。 < 匹配单词的开始,如:/ 匹配单词的结束,如/love>/匹配包含以love结尾的单词的行。 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的行。

    来自: http://man.linuxde.net/se

    已匹配字符串标记&

    正则表达式w匹配每一个字母,使用&替换它,&对应之前所匹配到的字母。

    echo "thisisatestline"|sed 's/w/& /g'
    t h i s i s a t e s t l i n e

    正则表达式w+匹配每一个单词,使用&替换它,&对应之前所匹配到的单词。

    echo "this is a test line"|sed 's/w+/& /g'
    this  is  a  test  line

    echo "this is a test line"|sed 's/w+/[&]/g'
    [this] [is] [a] [test] [line]

    附加方法:

    echo "asdfghjkl"|sed -e 's/(.)/1 /g'

    将每个单词都加上双引号
    echo this is a test line|sed 's/w+/“&”/g'
    “this” “is” “a” “test” “line”
    在以root开头的

    sed -e 's/^root/&_localhost/g' passwd.txt |grep root
    root_localhost:x:0:0:root:/root:/bin/bash

    11.sed 命令分组匹配分隔

    解释:(.) 里面有几个点就是已几个字符为一组

    1#:这个就是1后面是什么就以什么为分隔符

    以每个字符为分隔后面加上空格

    [root@www ~]# echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/(.)/1 /g'
    a s d f g h j k l q w e r t y u i o p z x v c b n m

    以每2个字符为分隔后面加上空格

    [root@www ~]# echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/(..)/1 /g'
    as df gh jk lq we rt yu io pz xv cb nm

    以每3个字符为分隔后面加上空格
    [root@www ~]# echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/(...)/1 /g'
    asd fgh jkl qwe rty uio pzx vcb nm

    以#号为分隔符分隔每个字符

    echo "asdfghjklqwertyuiopzxvcbnm"|sed 's/(.)/1#/g'  
    a#s#d#f#g#h#j#k#l#q#w#e#r#t#y#u#i#o#p#z#x#v#c#b#n#m#

    以空格为分隔符按照4242的方式分隔

    ed -e 's/(....)(..)/1 2 /g' sed.txt|head -n1
    root :x :0:0 :r oot: /r oot: /b in/b as h

    12.子串匹配标记1

    echo aaa BBB|sed 's/([a-z]+)/1/'
    aaa BBB

    echo aaa BBB|sed 's/([a-z]+) ([A-Z]+)/1/'
    aaa

    echo aaa BBB|sed 's/([a-z]+) ([A-Z]+)/1 2/'

    aaa BBB

    echo aaa BBB|sed 's/([a-z]+) ([A-Z]+)/2 1/'
    BBB aaa

    13.

    14.

    15.

    16.

    17.

    18.

    19.

    20.

  • 相关阅读:
    linux开机自启动服务优化设置命令
    yum网络源配置
    CentOS 6一键系统优化 Shell 脚本
    linux系统下find删除目录下除一文件外的所有文件
    linux系统时间同步
    Memcached 查询stats及各项状态解释
    VMWARE 12安装Tools
    win8及以上2012 R2,virtualbox 5.0.20安装centOS6以上各种注意事项
    HTTP的上传文件实例分析
    java中类加载顺序(深入Java)
  • 原文地址:https://www.cnblogs.com/xiaoyongzhuo/p/7452118.html
Copyright © 2011-2022 走看看