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的行打印出来
没有评论:
发表评论