zoukankan      html  css  js  c++  java
  • sed练习2

    [root@node2 ~]# cp /etc/passwd /server/scprits/
    [root@node2 ~]# cd /server/scprits/
    [root@node2 scprits]# ls -l passwd 
    -rw-r--r--. 1 root root 1065 12月  2 20:49 passwd
    [root@node2 scprits]# sed -n '3a 
    user.' passwd
    user.
    #第三行加入一行
    [root@node2 scprits]# sed '/root/a 
    > root1' passwd
    root:x:0:0:root:/root:/bin/bash
    root1
    #匹配模式root的行之后加一行root1
    [root@node2 scprits]# sed -n '$a 
    liujunjun' passwd
    liujunjun
    #最后一行加入一或多行。
    [root@node2 scprits]# sed -n '3i 
    liujunjun1' passwd
    liujunjun1
    #在第三行之前插入一行。
    [root@node2 scprits]# sed -n '/root/i 
    > ljj' passwd
    ljj
    ljj
    #在匹配模式root之前插入一行或多行。
    [root@node2 scprits]# sed -n '$i 
    > backup' passwd
    backup
    #在最后一行之前插入一行。

    更改文件中指定的行

    [root@node2 scprits]# sed '1cadmin' passwd 
    admin
    #修改文件的第一行内容为root。
    [root@node2 scprits]# sed '/sbin/cbin' passwd 
    #修改匹配指定的行。
    [root@node2 scprits]# sed '$cdebug' passwd
    #修改文件最后一行。

    删除文件中的行

    [root@node2 scprits]# sed '4d' passwd     #删除文件中的第4行
    [root@node2 scprits]# sed '4~2d' passwd
    #从文件中第4行开始删除,并且每隔2行删除一行。
    [root@node2 scprits]# sed '2,5d' passwd
    #删除文件中第2行到第5行
    [root@node2 scprits]# sed '2,5!d' passwd 
    #删除文件中除第2行到第5行之外的行。
    [root@node2 scprits]# sed '$d' passwd 
    #删除文件最后一行。
    [root@node2 scprits]# sed -e '$d' passwd -e '/root/d' passwd
    #删除匹配模式的行
    [root@node2 scprits]# sed '/root/,$d' passwd 
    #从匹配模式的行删除到文件最后一行。
    [root@node2 scprits]# sed '/root/,+1d' passwd 
    #删除文件中匹配模式指定模式的行及其后面的n行
    [root@node2 scprits]# sed '/^$/d' passwd 
    #删除文件中的空行。
    [root@node2 scprits]# sed '/root|ftp/!d' passwd 
    #删除文件中不匹配指定模式的行。
    [root@node2 scprits]# sed '1,4{/root/d}' passwd
    #删除文件的指定范围内的行中匹配指定模式的行。

    替换文件中的内容

    [root@node2 scprits]# sed 's/root/admin/' passwd 
    #替换一行中第一个匹配模式的字符串
    [root@node2 scprits]# sed 's/root/admin/g' passwd
    替换文件中的匹配指定模式的所有字符串。
    [root@node2 scprits]# sed 's/root/admin/2' passwd 
    #替换文件中第行第2个匹配模式的字符串。
    [root@node2 scprits]# sed 's/root/admin/gpw /tmp/passwd' passwd
    #将发生字符串替换的行写入指定的文件,并只打印替换的行。
    [root@node2 scprits]# sed '/bin/s////g' passwd 
    #将文件passwd中匹配模式/bin/的行中的/之后的字符串清空(替换为空)
    [root@node2 scprits]# sed 's/..$//g' passwd 
    #删除掉字符串的个数由s/..$//g 中的圆点的个数决定,就是删除掉每行最后的2个字符。
    [root@node2 scprits]# sed 's/^..//g' passwd
    [root@node2 scprits]# sed '1,10s/^/#/g' passwd 
    #1-10行加#号
    [root@node2 scprits]# sed 's/^#//g' passwd 
    #去#号
    [root@node2 scprits]# sed 's/^#//;/^$/d' passwd 
    #删除文件中的注释及其空行。
    [root@node2 scprits]# sed -i 's/^/1./' passwd
    [root@node2 scprits]# sed 's/^[0-9]./(&)/' passwd
    #给文件passwd每个行数字编码加一个小括号(),利用符号&.

    打印文件中的行。

    [root@node2 scprits]# sed -n '4p' passwd   #打印文件中的第4行。
    [root@node2 scprits]# sed -n '3~2p' passwd #打印文件中从第3行开始,并且每隔2行就打印一行
    [root@node2 scprits]# sed -n '$p' passwd  #打印最后一行。
    [root@node2 scprits]# sed -n '2,5p' passwd  #打印第2行至第5行。
    [root@node2 scprits]# sed -n '2,$p' passwd #打印第2行到最后一行。
    [root@node2 scprits]# sed -n '/root/p' passwd 
    #打印指定匹配的行。
    [root@node2 scprits]# sed -n '/root/,3p' passwd
    #打印文件中指定匹配的行的到第6行。
    [root@node2 scprits]# sed -n '1,/ft/p' passwd 
    #打印文件中第1行到指定匹配模式行的内容。
    [root@node2 scprits]# sed -n '/ftp/,$p' passwd
    #打印文件中指定匹配模式行到最后一行
    [root@node2 scprits]# sed -n '/ftp/,+2p' passwd
    #打印文件中匹配指定模式的行及其后面2行。
    [root@node2 scprits]# sed -n '/ftp/,/ntp/p' passwd
    #打印文件中从匹配指定模式的行到匹配另一个指定模式的行的内容。

    打印文件中的行号

    [root@node2 scprits]# sed -n '$=' passwd  #打印文件的总行数。
    [root@node2 scprits]# sed -n '/root/{=;p}' passwd
    1
    1.1.root:x:0:0:root:/root:/bin/bash
    10
    1.1.operator:x:11:0:operator:/root:/sbin/nologin
    #打印文件中包含root的行号及其内容。

    从文件中读取向文件中写入。

    [root@node2 scprits]# touch sj.txt
    [root@localhost shell]# sed -n 'r ip.txt' sj.txt                #在文件sj.txt最后一行读入文件ip.txt的内容。
                [root@localhost shell]# sed -n '1w sj.txt' ip.txt                 #将文件sj.txt的第一行写入到文件ip.txt 
                [root@localhost shell]# sed -n -e '1w sj.txt' -e '$w sj.txt' ip.txt            #将文件sj.txt的第一行到最后一行写入到文件ip.txt.
                [root@localhost shell]# sed -n '/2.2.2.2/w sj.txt' ip.txt         #将文件sj.txt中匹配模式/2.2.2.2/的行写入到ip.txt文件中。
                [root@localhost shell]# sed -n '/2.2.2.2/,$w sj.txt' ip.txt     #将文件sj.txt中匹配模式/2.2.2.2/的行到最后一行都写入到ip.txt文件中。
                [root@localhost shell]# sed -n '/2.2.2.2/,4w sj.txt' ip.txt        #其后的4行。

    在sed中使用shell变量。

    [root@node2 scprits]# cat > input.file << eof
    > The name of terminal which you are using is _terminal-type_.
    > eof
    [root@node2 scprits]# sed "s/_terminal-type_/$TERM/" input.file
    The name of terminal which you are using is vt100.
    当sed指令使用的是shell变量时,它可能会是任意字符串,
  • 相关阅读:
    P1092 虫食算
    P1040 加分二叉树
    cfER76 abcd
    cf599 div2 a/b1/b2/c
    AtCoder Contest 144 DE
    Round G 2019
    luogu3084 Photo 单调队列优化DP
    luogu4234 最小差值生成树
    luogu1373 小a和uim之大逃离
    luogu1070 道路游戏 单调队列
  • 原文地址:https://www.cnblogs.com/liujunjun/p/11973485.html
Copyright © 2011-2022 走看看