文本三剑客之 sed 使用

 语法:sed [-hnV] [-e<script>] [-f<script文件>]  [目标文本文件]

 sed -i -e '91c\            self.GPIO_DO3 = 16  # P10,风扇' -e '95c\            self.GPIO_DO6 = 29  # 声级计    ' work/IO/Cel712Calibrate.py

sed -i -e '1,5d' .ssh/known_hosts

 

说明:

1.sed的使用方法,调用sed 命令的语法有两种:指定sed指令将指令事先保存至文件中

2.常用选项

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

     -e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项

     -f:后跟sed指令的文件

     -i:直接对内容进行修改,不加-i时默认输出到屏幕,不会对文件做实际修改

     -n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行

 

3.sed中的编辑命令

    a:追加  向匹配行后面插入内容

    c:更改  更改匹配行的内容

    i:插入  向匹配行前插入内容

    d:删除  删除匹配的内容

    s:替换  替换掉匹配的内容 

    p:打印  打印出匹配的内容,通常与-n选项和用

    =:用来打印被匹配的行的行号

    n:读取下一行,遇到n时会自动跳入下一行

    r,w:读和写编辑命令,r用于将内容读入文件,w用于将匹配内容写入到文件

 

sed  '3ahello'        1.txt       #向第三行后面添加hello,3表示行号

sed  '/123/ahello'   1.txt  #向内容123后面添加hello,如果文件中有多行包括123,则每一行后面都会添加

sed   '$ahello'       1.txt       #在最后一行添加hello

sed '3ihello'  1.txt    #在第三行之前插入hello

sed '/123/ihello'  1.txt   #在包含123的行之前插入hello,如果有多行包含123,则包含123的每一行之前都会插入hello

sed '$ihello'  1.txt     #在最后一行之前插入hello

sed  '1chello'  1.txt  #将文件1.txt的第一行替换为hello

sed  '/123/chello'  1.txt  #将包含123的行替换为hello

sed '$chello'  1.txt  #将最后一行替换为hello

sed  '4d'  1.txt    #删除第四行

sed '1~2d' 1.txt   #从第一行开始删除,每隔2行就删掉一行,即删除奇数行

sed   '1,2d'  1.txt   #删除1~2行

sed  '1,2!d'  1.txt   #删除1~2之外的所有行

sed  '$d'   1.txt      #删除最后一行

sed  '/123/d'   1.txt   #删除匹配123的行

 sed  '/123/,$d'  1.txt  #删除从匹配123的行到最后一行

 sed  '/123/,+1d'  1.txt   #删除匹配123的行及其后面一行

 sed  '/^$/d'    1.txt    #删除空行

 sed   '/123\|abc/!d'  1.txt    #删除不匹配123或abc的行,/123\|abc/ 表示匹配123或abc ,!表示取反

 sed  '1,3{/123/d}'   1.txt     #删除1~3行中,匹配内容123的行,1,3表示匹配1~3行,{/123/d}表示删除匹配123的行

 sed 's/^/#&/g' 1.txt  #在1.txt文件中的每一行开头加一个#

sed  's/123/hello/'   1.txt   #将文件中的123替换为hello,默认只替换每行第一个123

sed  's/123/hello/g'  1.txt #将文本中所有的123都替换为hello

sed 's/123/hello/2'   1.txt  #将每行中第二个匹配的123替换为hello

sed  -n 's/123/hello/gpw  2.txt'   1.txt    #将每行中所有匹配的123替换为hello,并将替换后的内容写入2.txt

sed  '/#/s/,.*//g'  1.txt   #匹配有#号的行,替换匹配行中逗号后的所有内容为空  (,.*)表示逗号后的所又内容

sed  's/..$//g'  1.txt  #替换每行中的最后两个字符为空,每个点代表一个字符,$表示匹配末尾  (..$)表示匹配最后两个字符

sed 's/^#.*//'  1.txt      #将1.txt文件中以#开头的行替换为空行,即注释的行  ( ^#)表示匹配以#开头,(.*)代表所有内容

sed 's/^#.*//;/^$/d'  1.txt  #先替换1.txt文件中所有注释的空行为空行,然后删除空行,替换和删除操作中间用分号隔开

sed  's/^[0-9]/(&)/' 1.txt #将每一行中行首的数字加上一个小括号 (^[0-9])表示行首是数字,&符号代表匹配的内容

        或者 sed 's/[0−9][0−9]/(\1)/' 1.txt #替换左侧特殊字符需钥转义,右侧不需要转义,\1代表匹配的内容

sed  's/$/&'haha'/'  1.txt   # 在1.txt文件的每一行后面加上"haha"字段

sed  -n '3p'  1.txt   #打印文件中的第三行内容

sed  -n '2~2p'  1.txt   #从第二行开始,每隔两行打印一行,波浪号后面的2表示步长

sed -n '$p'  1.txt  #打印文件的最后一行

sed -n '1,3p'  1.txt  #打印1到3行

sed  -n '3,$p'  1.txt  #打印从第3行到最后一行的内容

sed  -n '/you/p'  1.txt   #逐行读取文件,打印匹配you的行

sed  -n '/bob/,3p'  1.txt  #逐行读取文件,打印从匹配bob的行到第3行的内容

sed  -n  '/you/,3p'  1.txt  #打印匹配you 的行到第3行,也打印后面所有匹配you 的行

sed  -n '1,/too/p'  1.txt    #打印第一行到匹配too的行

sed  -n  '3,/you/p'  1.txt   #只打印第三行到匹配you的行

sed  -n '/too/,$p'  1.txt  #打印从匹配too的行到最后一行的内容

sed  -n '/too/,+1p'  1.txt    #打印匹配too的行及其向后一行,如果有多行匹配too,则匹配的每一行都会向后多打印一行

sed  -n '/bob/,/too/p'  1.txt   #打印从匹配内容bob到匹配内容too的行

sed  -n "$="   1.txt   #打印1.txt文件最后一行的行号(即文件有多少行,和wc -l 功能类似)

sed  -n '/error/='  1.txt     #打印匹配error的行的行号

sed  -n '/error/{=;p}'   1.txt    #打印匹配error的行的行号和内容(可用于查看日志中有error的行及其内容)

sed  'r 2.txt'  1.txt  #将文件2.txt中的内容,读入1.txt中,会在1.txt中的每一行后都读入2.txt的内容

sed '3r 2.txt'  1.txt       #在1.txt的第3行之后插入文件2.txt的内容(可用于向文件中插入内容)

sed  '/245/r   2.txt'   1.txt    #在匹配245的行之后插入文件2.txt的内容,如果1.txt中有多行匹配456则在每一行之后都会插入

sed  '$r  2.txt'   1.txt     #在1.txt的最后一行插入2.txt的内容

sed  -n  'w 2.txt'   1.txt   #将1.txt文件的内容写入2.txt文件,如果2.txt文件不存在则创建,如果2.txt存在则覆盖之前的内容

sed   -n '2w  2.txt'   1.txt   #将文件1.txt中的第2行内容写入到文件2.txt

sed -n -e '1w 2.txt' -e '$w 2.txt' 1.txt #将1.txt的第1行和最后一行内容写入2.txt

sed -n -e '1w 2.txt' -e '$w 3.txt' 1.txt #将1.txt的第1行和最后一行分别写入2.txt和3.txt

sed  -n  '/abc\|123/w  2.txt'    1.txt   #将1.txt中匹配abc或123的行的内容,写入到2.txt中

sed  -n '/666/,$w 2.txt'   1.txt   #将1.txt中从匹配666的行到最后一行的内容,写入到2.txt中

sed  -n  '/xyz/,+2w  2.txt'     1.txt     #将1.txt中从匹配xyz的行及其后2行的内容,写入到2.txt中

 

posted @ 2021-11-23 23:33  Orientation  阅读(53)  评论(0编辑  收藏  举报