Who am I

我的照片
Hefei, Anhui, China
Research Fields: Satellite Geodesy

2012年2月13日星期一

Shell sed命令

sed命令
简介
sed(stream editor)是一个可用于过滤文本的流编辑器,sed逐行处理文件(或标准输入)并把处理后的内容输出到屏幕或重定向输出到文件中。


特点
1. 非交互式文本流编辑器,它读取文件或标准输入的一行并将其存储在临时缓冲区中,sed命令处理临时缓冲区中的内容,完成后把缓冲区的内容输出。处理完一行后再读取下一行。因此,sed是对文件的拷贝进行编辑和修改,不会修改和破坏源文件
2. sed通过行号正则表达式指定要改变的文本行。
3. sed默认将每个输入的行都打印出来(被修改的行再打印一遍)


用法
sed有两种调用方法:在命令行中指定编辑指令;将编辑指令存储到一个文件中,在sed命令中调用该文件。
方法1: sed [options] '/pattern/actions' files
方法2: sed [options] -f scriptfile files (其中scriptfile中是/pattern/actions的集合)


选项
-e    允许在一个命令行中给出多个编辑指令
如  sed -e 's/ MA/, Massachusetts' -e ' s/ PA/, Pennsylvania/' file
注:在一个命令行中指定多个编辑指令还有其它两种方法:
用分号分隔指令: sed 's/ MA/, Massachusetts/; s/ PA/, Pennsylvania/' file
用分行提示符(>):sed ‘
                      > s/ MA/, Massachusetts/
                      > s/ PA/, Pennsylvania/
                      > s/ CA/, California/'    file
-n     阻止输入行的自动输出
-f      跟随脚本的文件名


定位文本(通过行号和pattern)
x                         指定行号
x,y                       行号范围
/pattern/               查询包含模式的行
/pattern1/pattern2/ 查询包含两个模式的行
/pattern/,x             在指定行号上查询匹配模式的行,从第一个匹配pattern的行到x行之间
x,/pattern/             通过行号和模式查询匹配行,从x行开始到第一个匹配pattern的行之间
x,y!                       查询不包含行号x,y的行


动作(actions)
d       删除行
p       打印文本
!        对所选行之外的所有行应用命令
=       打印行号
s        替换文本(s/west/north/,替换每行出现的第一个west;s/west/north/g,替换每行所有的west)
r        从文件中读取行内容
w       按行写入新文件
a\      在当前行后添加一行或多行
i\       在当前行之前插入文本
c\      用新文本代替当前行中的文本
q       退出sed
y       将一字符转换成另一字符


实例
d命令
sed '2d' test            删除test文件的第二行
sed '2,$d' test          删除test文件的第二行到末尾所在行
sed '$d' test             删除test文件的最后一行
sed ’/test/d’             删除test文件中所有包含test的行


p命令
sed '/fruit/p' test      打印包含"fruit"的行,但是其它所有的行业会默认输出一遍
sed -n '/fruit/p' test  只打印包含"fruit"的行


s命令
sed 's/test/mytest/g' example     在整行范围内把test替换为mytest
sed -n 's/test/mytest/g' example 只打印那些发生替换的行
sed 's/^192\.168\.0\.1/&localhost/' example &表示替换字符串中被找到的部分。结果变成192.168.0.1localhost


r命令
sed '/test/r file' example      file里面的内容被读进来,显示在与test匹配的行后面;如果匹配多行,则file的内容将显示在所有匹配行的下面。


w命令
sed -n 'test/w file' example  在example文件中所有包含test的行都被写入file里。


a命令
sed '4a\this is a test' example  在example文件中的第四行加入“This is a test”
sed '4,6a\this is a test' example 在example文件中的第4,5,6行后都加入“This is a test”
sed '/hello/a\this is a test' example 在example文件中匹配hello的行后都加入"This is a test"


i命令
sed '4i\this is a test' example   在example文件的第四行之加入“this is a test”
sed ’/hello/i\this is a test‘ example 在example文件中匹配hello的行之前都加入“this is a test”


c命令
sed '4c\this is a test' example  把example文件中第四行改成this is a test
sed '/hello/c\this is a test' example 把example文件中匹配hello的行都改成“this is a test”


=命令
sed '/hello/=' example    显示example文件里匹配hello字符的所有行的行号


q命令
sed '/hello/q; s/Hello/hello/g' example  打印匹配hello行后即退出sed命令,不执行后面的替换命令


!命令
sed '/hello/!d' example    把example文件中不含hello的行打印出来

没有评论:

发表评论