日期:2014-05-16 浏览次数:20743 次
linux学习--sed,sort,uniq,join,cut,paste,split
linux学习--sed,sort,uniq,join,cut,paste,split
==============================sed==========================
1、调用sed
?调用s e d有三种方式:在命令行键入命令;将s e d命令插入脚本文件,然后调用s e d;将s e d
命令插入脚本文件,并使s e d脚本可执行。
?使用s e d命令行格式为:
? sed [选项] s e d命令? 输入文件。
?记住在命令行使用s e d命令时,实际命令要加单引号。s e d也允许加双引号
?
?使用s e d脚本文件,格式为:
? sed [选项] -f sed脚本文件输入文件
??
?要使用第一行具有s e d命令解释器的s e d脚本文件,其格式为
? sed脚本文件 [选项] 输入文件
?
?sed选项如下:
?n 不打印;s e d不写编辑行到标准输出,缺省为打印所有行(编辑和未编辑)。p命令可以
?用来打印编辑行。
?c 下一命令是编辑命令。使用多项编辑时加入此选项。如果只用到一条s e d命令,
?此选项无用,但指定它也没有关系。
?f 如果正在调用s e d脚本文件,使用此选项。此选项通知s e d一个脚本文件支持所有的s e d
?命令,例如:sed -f myscript.sed input_file,这里m y s c r i p t . s e d即为支持s e d命令的文件。
2、使用sed在文件中查询文本的方式
?s e d浏览输入文件时,缺省从第一行开始,有两种方式定位文本:
?1) 使用行号,可以是一个简单数字,或是一个行号范围。
?2) 使用正则表达式
??? 使用s e d在文件中定位文本的方式
? x x为一行号,如1
? x , y 表示行号范围从x到y,如2,5表示从第2行到第5行
? / p a t t e r n / 查询包含模式的行。例如/ d i s k /或/[a-z]/
? / p a t t e r n / p a t t e r n / 查询包含两个模式的行。例如/ d i s k / d i s k s /
? p a t t e r n / , x 在给定行号上查询包含模式的行。如/ r i b b o n / , 3
? x , / p a t t e r n / 通过行号和模式查询匹配行。3 . / v d u /
? x , y ! 查询不包含指定行号x和y的行。1 , 2 !
3、基本sed编辑命令
??? sed编辑命令
? p 打印匹配行
? = 显示文件行号
? a \ 在定位行号后附加新文本信息
? i \ 在定位行号后插入新文本信息
? d 删除定位行
? c \ 用新文本替换定位文本
? s 使用替换模式替换相应模式
? r 从另一个文件中读文本
? w 写文本到一个文件
? q 第一个模式匹配完成后推出或立即推出
? l 显示与八进制A S C I I代码等价的控制字符
? { } 在定位行执行的命令组
? n 从另一个文件中读文本下一行,并附加在下一行
? g 将模式2粘贴到/pattern n/
? y 传送字符
? n 延续到下一输入行;允许跨行的
4、sed和正则表达式
? sed识别任何基本正则表达式和模式及其行匹配规则
5、基本sed编程举例
? 使用p(rint)显示行:
? p r i n t命令格式为[ a d d r e s s [,a d d r e s s ] P。显示文本行必须提供s e d命令行号。
?? sed -n '2p' quote.txt
? 显示从2到4行
?? sed -n '2,4p' url_access_detail.txt
??
? 打印模式:
?? sed -n '/1028f/p' url_access_detail.txt?
?? sed -n '/\/\?1028f/p' url_access_detail.txt?
???
? 使用模式和行号进行查询:
?? 只在第4行查询?
??? sed -n '4,/\/\?1028f/'p url_access_detail.txt
????
? 显示整个文件:
?? 只需将行范围设为第一行到最后一行1 , $。$意为最后一行:
?? sed -n '1,$p' quote.txt
???
? 任意字符:
??? 匹配任意字母,后跟任意字母的0次或多次重复,并以i n g结尾,模式为/ . * i n g /。可以使用
?这个模式查询以i n g结尾的任意单词
?? sed -n '/.*ing/'p quote.txt
???
? 打印行号:
? 要打印行号,使用等号=。打印模式匹配的行号,使用格式/pattern/=。
?? sed -e '/music/=' quote.txt
? (不过这些好像在linux里面不支持)
??
? 附加文本:
? sed -n? '/1028f/'p? url_access_detail.txt |sed '/h/ a\then haha'
? 在前面添加,用i\
? 替换,用c\
? 删除,用d\
6、替换文本
? 替换命令用替换模式替换指定模式,格式为:
?? [ a d d r e s s [,address]] s/ pattern-to-find /replacement-pattern/[g p w n]
? s选项通知s e d这是一个替换操作,并查询p a t t e r n - t o - f i n d,成功后用r e p l a c e m e n t - p a t t e r n替
?换它。
? g 缺省情况下只替换第一次出现模式,使用g选项替换全局所有出现模式。
? p 缺省s e d将所有被替换行写入标准输出,加p选项将使- n选项无效。- n选项不打印输出
?结果。
? w 文件名使用此选项将输出定向到一个文件。
?? sed 's/haha/hehe/g w a.out' quote.txt
???
? 使用替换修改字符串:
? 如果要附加或修改一个字符串,可以使用( &)命令,&命令保存发现模式以便重新调用
?它,然后把它放在替换字符串里面。这里给出一个修改的设计思路。先给出一个被替换模式,
?然后是一个准备附加在第一个模式后的另一个模式,并且后面带有&,这样修改模式将放在
?匹配模式之前。例如, s e d语句s/nurse/"Hello"&/p 的结果如下
? sed 's/nurse/"Hello" &am