分享

sed命令

 牛的主人 2015-11-18


sed是一个非交互性性文本编辑器它编辑文件或标准输入导出的文件拷贝。

 

标准输入可能是来自键盘、文件重定向、字符串或变量,或者是一个管道文件。

 

sed可以随意编辑小或大的文件,有许多sed命令用来编辑、删除,并允许做这项工作时不在现场。

 

sed一次性处理所有改变,因而变得很有效,对用户来说,最重要的是节省了时间。

 

sed必须通过行号和正则表达式指定要改变的文本行.

 

sed 在文本中定位文本的方式:

 

x  x                   :为一行号,比如1

 

x,y                    :表示行号范围从xy,2,5表示从第2行到第5

 

/pattern/              :查询包含模式的行,/disk//[a-z]/

 

/pattern/pattern/      :查询包含两个模式的行,/disk/disks/

 

/pattern/,x            :在给定行号上查询包含模式的行,/disk/,3

 

x,/pattern/            :通过行号和模式查询匹配行,如 3,/disk/

 

x,y!                   :查询不包含指定行号xy的行

 



sed 基本编辑命令: 

p               打印匹配行                                            

 

c\    用新文本替换定位文本

 

=               显示文件行号                                            

 

s     使用替换模式替换相应模式

 

a\              在定位行号后附加新文本信息                          

 

r         从另一个文本中读文本

 

i\              在定位行号后插入新文本信息                           

 

w     写文本到一个文件

 

d               删除定位行                                            

 

q     第一个模式匹配完成后退出或立即退出

 

l               显示与八进制ASCII代码等价的控制字符                   

 

y  传送字符

 

n               从另一个文本中读文本下一行,并附加在下一行                 

 

{}     在定位行执行的命令组

 

g               将模式2粘贴到/pattern n/



 

基本sed编程举例: 


使用p(rint)显示行:      sed -n '2p' temp.txt               只显示第2行,使用选项n


 

打印范围:               sed -n '1,3p' temp.txt              打印第1行到第3行

 

打印模式:               sed -n '/movie/'p temp.txt           打印含movie的行

 

使用模式和行号查询:     sed -n '3,/movie/'p temp.txt          只在第3行查找movie并打印

 

显示整个文件:           sed -n '1,$'p temp.txt               $为最后一行

 

任意字符:               sed -n '/.*ing/'p temp.txt           注意是.*ing,而不是*ing

 

打印行号:               sed -e '/music/=' temp.txt

 

附加文本:(创建sed脚本文件)chmod u+x script.sed,运行时./script.sed temp.txt

 

#!/bin/sed -f

 

/name1/ a\             #a\表示此处换行添加文本        

 

HERE ADD NEW LINE.     #添加的文本内容

 

插入文本: /name1/ a\ 改成 4 i\ 4表示行号,i插入

 

修改文本: /name1/ a\ 改成 /name1/ c\ 将修改整行,c修改

 

删除文本: sed '1d' temp.txt  或者 sed '1,4d' temp.txt

 

替换文本: sed 's/source/OKSTR/' temp.txt     将source替换成OKSTR

 

sed 's/\$//g' temp.txt             将文本中所有的$符号全部删除

 

sed 's/source/OKSTR/w temp2.txt' temp.txt 将替换后的记录写入文件temp2.txt

 

替换修改字符串: sed 's/source/"ADD BEFORE" &/p' temp.txt

 

结果将在source字符串前面加上"ADD BEFORE",这里的&表示找到的source字符并保存

 

sed结果写入到文件: sed '1,2 w temp2.txt' temp.txt

 

sed '/name/ w temp2.txt' temp.txt

 

从文件中读文本: sed '/name/r temp2.txt' temp.txt

 

在每列最后加文本: sed 's/[0-9]*/& Pass/g' temp.txt

 

从shell向sed传值: echo $NAME | sed "s/go/$REP/g"   注意需要使用双引号 



快速一行命令: 



's/\.$//g'         删除以句点结尾行

 

'-e /abcd/d'       删除包含abcd的行

 

's/[][][]*/[]/g'   删除一个以上空格,用一个空格代替

 

's/^[][]*//g'      删除行首空格

 

's/\.[][]*/[]/g'   删除句号后跟两个或更多的空格,用一个空格代替

 

'/^$/d'            删除空行

 

's/^.//g'          删除第一个字符,区别  's/\.//g'删除所有的句点

 

's/COL/(...\)//g'  删除紧跟COL的后三个字母

 

's/^\///g'         删除路径中第一个\

 


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多