`

sed小结

阅读更多
sed [options] 'command' file(s)   
sed [options] -f scriptfile file(s)  
 
1.options
-n 取消默认输出,只有经过sed特殊处理行(或者动作)才会被列出来
-e 多重编辑模式
-f 指定sed脚本文件名
 
2. command
1) d  从模板块(Pattern space)位置删除行
 
# delete the 3rd line 
sed '3d' file

# delete lines from the 3rd to end
sed '3,$d' file

# delete line it contains "line"
sed '/line/'d file
 

2) p  打印模板块的行
 
# "abc start\nefg middle" 
echo "abc start\nefg middle\nhij end\nover" | sed -n '/start/,/middle/p'  

# "efg middle\nhig end" 
echo "abc start\nefg middle\nhij end\nover" | sed -n '2,/end/p'   

# "abc start123\nefg middle123"
echo "abc start\nefg middle\nhij end\nover" | sed -n '/start/,/middle/s/$/123/p'   
 
# grep def 
echo "abc\ndef\nghi\njkl" | sed -n '/def/p'
echo "abc\ndef\nghi\njkl" | sed '/def/!d'

# grep -v def
echo "abc\ndef\nghi\njkl" | sed -n '/def/!p'# "abc\nghi\njkl" 
echo "abc\ndef\nghi\njkl" | sed '/def/d'# "abc\nghi\njkl" 

# abc,匹配行的前一行
echo "abc\ndef\nghi\njkl" | sed -n  '/def/{g;1!p;};h'

# ghi,匹配行的后一行
echo "abc\ndef\nghi\njkl" | sed -n  '/def/{n;p}'
 

3) s/re/string/  用string替换正则表达式re
echo "abcdefg" | sed 's/abc/123/g'        # 123defg
echo "abcdefg" | sed -n 's/^abc/123/p'    # 123defg
echo "abcdefg" | sed 's#\(abc\)defg#\1#'  # abc

# delete spaces in front of each row
sed 's/^[ ]*/g' file 
sed 's/^ */g' file    
sed 's/^[[:space:]]*//g file 
 
4) r file 从file中读行  eg: file contains "123\n456"
# abc\n123\n456\ndef
echo "abc\ndef" | sed '/abc/r file'   

 
5) w file  向file中写行,清空原有文件内容
# now, file content is "abc"
echo "abc\ndef" | sed -n '/abc/w file'  
 
6) a\ 当前行后面加入一行文本
# "abc\n123\ndef", '\'换行时,不可少,最后一行,可省略
echo "abc\ndef" | sed '/^abc/a\123'  
 
7) i\ 在当前行前面插入一行文本
# "123\nabc\ndef"
echo "abc\ndef" | sed '/^abc/i\123' 
 

8) h  将 hold space 中的内容使用 pattern space 中的内容来替换(清空暂存缓冲区)
9) H  将 hold space 中的内容使用 加上一个 trailing newline,而后 append pattern space(不清空暂存缓冲区)
 
10) g  将 pattern space 中的内容使用 hold space 中的内容来替换
11) G  将 pattern space 中的内容使用 加上一个 trailing newline,而后 append hold space
 
12) !  表示后面的命令对所有没有被选定的行发生作用

# "abc\ndef\nghi\ndef"
echo "abc\ndef\nghi" | sed -e '/def/h' -e '$G'

# "abc\ndef\nghi\n\ndef"  
echo "abc\ndef\nghi" | sed -e '/def/H' -e '$G'

# "abc\ndef\ndef"  
echo "abc\ndef\nghi" | sed -e '/def/h' -e '$g' 

# "abc\ndef\n\ndef" 
echo "abc\ndef\nghi" | sed -e '/def/H' -e '$g'  

#  "jkl\nghi\ndef\nabc" 
echo "abc\ndef\nghi\njkl" | sed '1!G;h;$!d'    

#  "abc\n\ndef\n" 
echo "abc\ndef" | sed G  

# "abc\n\ndef\n"                       
echo "abc\n\n\ndef" | sed '/^$/d;G'
 
# "abc\n\ndef\nghi\njkl", add a blank line before the matching one 
echo "abc\ndef\nghi\njkl" | sed '/def/{x;p;x;}' 

# "abc\ndef\n\nghi\njkl", add a blank line after the matching one
echo "abc\ndef\nghi\njkl" | sed '/def/G' 

# "abc\n\ndef\n\nghi\njkl", add a blank line before and after the matching one
echo "abc\ndef\nghi\njkl" | sed '/def/{x;p;x;G}' 
 
 
13) n  读取下一个输入行,用下一个命令处理新的行而不是用第一个命令
echo "abc\ndef" | sed '/abc/{n;s/e/E/;}' #  "abc\ndEf"
echo "abc\ndef\nghi\njkl" | sed 'n;d'  #  "abc\nghi", delete the even lines
 
14) y与tr类似,字符替换
#  "ABC\ndef"
echo "abc\ndef" | sed '1y/abcdef/ABCDEF/'  
 
15) =  打印当前行号码
#  2
echo "abc\ndef\nghi\njkl" | sed -n '/def/='   

# 4,  wc -l
echo "abc\ndef\nghi\njkl" | sed -n '$=' 


16) q 退出
# "abc\ndef", head -2
echo "abc\ndef\nghi\njkl" | sed 2q

# jkl, tail -1
echo "abc\ndef\nghi\njkl" | sed -e :a -e '$q;N;2,$D;ba'   

# "ghi\njkl", tail -2
echo "abc\ndef\nghi\njkl" | sed '$!N;$!D'

# jkl, tail -1
echo "abc\ndef\nghi\njkl" | sed '$!d'

# jkl, tail -1
echo "abc\ndef\nghi\njkl" | sed  -n '$p'

3. meta characters
^锚定行的开始 
$锚定行的结束
.匹配一个非换行符的字符
*匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[]匹配一个指定范围内的字符
[^]匹配一个不在指定范围内的字符
\(..\)保存匹配的字符
echo "abcdefg" | sed 's/\(abc\)def/\1***/'   # abc***g
 
&保存搜索字符用来替换其他字符
echo "abcdefg" | sed 's/d/--&--/'   # abc--d--efg
 
\<锚定单词的开始
\>锚定单词的结束
x\{m\}字符x重复m次
x\{m,\}字符x重复至少m次
x\{m,n\}字符x重复至少m次,至多n次

 

分享到:
评论

相关推荐

    linux中sed命令的使用与注意小结

    sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space),接着用sed命令处理缓冲区中的...

    awk用法小结--有关awk的材料

    awk用法小结 - - - by ruson 2006.4 NTU 1. awk非常适合于结构化的文本文件(行、列数据)复杂处理。相对于sed而言,它可进行复杂的编程处理,并且可以产生复杂的报表输出。 2. awk通常有三个版本,旧awk、nawk...

    sed找到关键字所在行并将其前面的第一个字符删除的命令

    sed找到关键字所在行并将其前面的第一个字符... 您可能感兴趣的文章:查看某时间段到现在的系统日志的sed命令linux之sed命令的用法一天一个shell命令 linux文本内容操作系列-sed命令详解linux中sed命令的使用与注意小结

    TCP-IP详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议

    1.10 小结 第2章 /CP协议 2.1 概述 2.2 /CP中的新CP选项 2.3 /CP实现所需变量 2.4 状态变迁图 2.5 /CP的扩展状态 2.6 小结 第3章 /CP使用举例 3.1 概述 3.2 客户重新启动 3.3 常规的/CP事务 3.4 服务器收到过时的...

    常用linux命令小结

    因为不耐烦反复的查,索性自己总结了一个pdf,里面包括常用的linux命令,包括gcc,grep,tar,sed,find,screen,nohup,scp等,另外还有一些常用的文本处理命令如cat,split,head,tail,uniq,wc,more,less等。

    Linux与Unix Shell编程指南(PDF格式,共30章)

    1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改...

    Linux与unix shell编程指南

    1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改...

    linux与unix shell编程指南.rar

    1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改...

    shell编程和unix命令

    1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改...

    TCPIP协议详解卷三:TCP事务协议,HTTP,NNTP和UNIX域协议

    1.10 小结 第2章 /CP协议 2.1 概述 2.2 /CP中的新CP选项 2.3 /CP实现所需变量 2.4 状态变迁图 2.5 /CP的扩展状态 2.6 小结 第3章 /CP使用举例 3.1 概述 3.2 客户重新启动 3.3 常规的/CP事务 3.4 服务器收到过时的...

    Linux shell编程指南

    1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改...

    LINUX与UNIX SHELL编程指南 高清PDF

    1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改...

    LINUX与UNIX SHELL编程指南

    1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改...

    linux与unix shell编程指南

    1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改...

    linux与unix shell编程指南part2

    1.10 小结 13 第2章 使用find和xargs 14 2.1 find命令选项 14 2.1.1 使用name选项 15 2.1.2 使用perm选项 16 2.1.3 忽略某个目录 16 2.1.4 使用user和nouser选项 16 2.1.5 使用group和nogroup选项 16 2.1.6 按照更改...

Global site tag (gtag.js) - Google Analytics