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

这里的技术是共享的

You are here

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

image.png

常用选项:

-n:不输出模式中的内容至屏幕:

-e:多点编辑:

-f /PATH/TO/SCRIPT_FILE:从指定文件中读取编辑脚本:

-r:支持使用扩展正则表达式;

-i:原处编辑;

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




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


image.png

image.png

地址定界

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

2)单地址

    #:指定的行

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

3)地址范围 

    #,#

    #,+#

    /pat1/,/pat2/

    #,/pat1/


4)~:步进

1~2    读所有奇数行

2~2    读所有偶数行



 -n, --quiet, --silent,,,suppress automatic printing of pattern space  静默模式,抑制模式空间里面的自动打印




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

[root@localhost ~]# sed  '1,3=' /etc/fstab            #   详解 见  /node-admin/22282

image.png


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

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

image.png


image.png

编辑命令:

d: 删除

p: 显示模式空间中的内容

a \text:在行后面追加文本;支持使用\n实现多行追加:

i \text:在行前面插入文本:支持使用\n实现多行插入:

c \text:替换行为单行或多行文本:

w /path/to/somefile:保存模式空间匹配到的行至指定文件中:

r/path/from/somefile:读取指定文件的文本流至模式空间中匹配到的行的行后:

=: 为模式空间中的行打印行号:

!:取反条件;



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:把模式空间中的内容覆盖至保持空间中:

H:把模式空间中的内容追加至保持空间中:

g:从保持空间取出数据覆盖至模式空间:

G:从保持空间取出内容追加至模式空间:

x:把模式空间中的内容与保持空间中的内容进行互换:

n:读取匹配到的行的下一行至模式空间: 进行覆盖原来的模式空间的内容   `n`命令的作用是输出当前模式空间的内容(如果没加`-n`的话),然后读取下一行到模式空间。但是这里用了`-n`,所以自动输出被抑制了

N:追加匹配到的行的下一行至模式空间: 并用换行符 \n 分隔。

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

D:删除多行模式空间中的所有行,,,D命令删除模式空间中的第一部分直到第一个换行符,然后重新开始循环,而不读取新的输入行。

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 删除模式空间中的多行(所有行),,,,D命令删除模式空间中的第一部分直到第一个换行符,然后重新开始循环,而不读取新的输入行。


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


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

sed -n "n;p" FILE    显示偶数行  见  /node-admin/22289

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

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

sed '$!d' FILE           取文件的最后一行       #不是最后一行的删除掉     #  见  /node-admin/22285

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

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

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

sed 'n;d' FILE            显示奇数行     (没看懂)   #把偶数行删掉   见 /node-admin/22288

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




普通分类: