欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 sed命令入门及进阶(01)_recv 部分内容 51:59秒之后 有大用


image.png

使用 -i 一定要先测试好 ,然后备份,这一点一定要注意




sed 里面可以实现条件判断和循环的


image.png

image.png

地址定界

1)不给地址,对全文进行处理

2)单地址

    #:指定的行

    /pattern/:被此处模式所能够匹配的每一行

3)地址范围 

    #,#

    #,+#

    /pat1/,/pat2/

    #,/pat1/


4)~:步进

1~2    读所有奇数行

2~2    读所有偶数行




等于号=,为模式空间中的行打印行号 显示符合条件的行的行号

[root@localhost ~]# sed  '1,3=' /etc/fstab

image.png


感叹号!是为地址定界取反的,跟在地址后面) (本质上感叹号不是一个命令) 除了 UUID开头的都删除

# sed '/^UUID/!d' /etc/fstab

image.png


image.png

s///:支持使用其它分隔符,s@@@,s###;

    替换标记:

            g: (global)行内全局替换

            p: (print)如果替换成功,则显示之,,,,显示替换成功的行

            w /PATH/TO/SOMEFILE:  (write)将替换成功后的结果保存至指定的文件中

image.png


image.png

image.png


高级编辑命令  


模式空间 pattern space   相当于生产车间

保持空间 (保留空间) hold space    相当于仓库  默认情况下,为空白行(当模式空间删除掉的时候保持空间也是为空,就没有空白行了;换句话说,没有模式空间(不是清空模式空间,是模大空间根本没有)的情况下,保持空间也没有了又好像不能这么理解,;;;;;;;; 好像是说模式空间删除掉后,就无法执行G追加了)

image.png

h: hold [address[,address]]h 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除。

H: hold [address[,address]]H 将pattern space中的内容append到hold space\n后。

g: get [address[,address]]g 将hold space中的内容覆盖到pattern space中,原来pattern space里的内容清除。

G: get [address[,address]]G 将hold space中的内容添加到pattern space\n后。

x: exchange 交换保持空间和模式空间的内容。

n: next 读取匹配到的行的下一行至模式空间,同时覆盖本行   

N: next 追加匹配到的行的下一行至模式空间,此时模式空间有两行,当前行和下一行

d: delete 删除模式空间中的一行

D: delete 删除模式空间中的多行(所有行)


任何一行读完之后不会再读第二次


一次时处理多个命令  使用分号隔开

sed -n "n;p" FILE    显示偶数行

sed '1!G;h;$!d' FILE   逆向显示文件内容, 行倒序输出,  相当于  tac 倒序输出

sed '$!N;$!D' FILE    取文件的最后两行 相当于 tail -2 FILE   (显示文件后两行)  (没看懂)

sed '$!d' FILE           取文件的最后一行

sed 'G' FILE               文件的每一行后面加个空白行        (因为保持空间默认是空白的)

sed 'g' FILE              每一行全部替换为空白行 

sed '/^$/d;G' FILE    空白行删除后,每一行后面再加个空白行     (没看懂)

sed 'n;d' FILE            显示奇数行     (没看懂)

sed -n '1!G;h;$p' FILE       逆向显示文件内容, 行倒序输出,  相当于  tac 倒序输出     (没看懂)

sed -i -n '1!G;h;$p' test.txt        (-i就保存到原文件里了)


image.png

image.png

image.png

image.png






[root@localhost ~]# sed 's@r..t@&er@' /etc/passwd        (显示了全部的内容)

image.png





[root@localhost ~]# sed -n 's@r..t@&er@' /etc/passwd        

[root@localhost ~]# sed -n 's@r..t@&er@p' /etc/passwd  (把匹配到的行,被替换的行进行显示,用p)

rooter:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/rooter:/sbin/nologin

ftp:x:14:50:FTP User:/var/fterp:/sbin/nologin

[root@localhost ~]#



[root@localhost ~]# vim test.txt

image.png

[root@localhost ~]# sed -n 'n;p' test.txt

2

4

6

8

10

[root@localhost ~]# 



[root@localhost ~]# sed '1!G;h;$!d' test.txt

6

5

4

3

2

1




[root@localhost ~]# sed '$!N;$!D' test.txt

5

6

[root@localhost ~]# sed '$!d' test.txt

10

[root@localhost ~]#




[root@localhost ~]# sed 'G' test.txt

image.png




[root@localhost ~]# sed 'g' test.txt


image.png




[root@localhost ~]# vim test.txt

image.png

[root@localhost ~]# sed '/^$/d;G' test.txt  把空白行删除,然后每一行下面加个空白行

image.png



# vim test.txt

image.png

[root@localhost ~]# sed 'n;d' test.txt        (显示奇数行)

1

3

5

7

9

[root@localhost ~]#

[root@localhost ~]# sed -n '1~2p' test.txt     (显示奇数行)

image.png

[root@localhost ~]#


[root@localhost ~]# sed -n '2~2p' test.txt   (显示偶数行)

image.png

[root@localhost ~]#

[root@localhost ~]# sed  '1!G;h;$p' test.txt

image.png



[root@localhost ~]# sed -n '1!G;h;$p' test.txt

image.png



[root@localhost ~]# sed -i -n '1!G;h;$p' test.txt        (-i就保存到原文件里了)

[root@localhost ~]# cat test.txt

image.png




普通分类: