文本处理工具sed编辑器
2016-05-27 22:37
295 查看
1.sed基本命令格式
sed 命令选项
2.sed选项
2.1替换选项s
基本格式:s/para1/para2/ s命令会用斜线间隔文本字符串,第二个代替第一个 一般只替换掉一行中匹配的第一个文本字符串
用替换标记flag的格式: s/pattern/replacement/flags
flags有4种:
数字,表明新文本将替换第几处模式匹配的地方 sed 's/test/exam/2'
g,表明新文本将会替换所有已有文本出现的地方 sed 's/test/exam/g'
p,原来的行的内容要打印出来,一般与-n一起用,只打印匹配的行 sed 's/test/exam/2'
w file,将替换的结果写到文件中 ,sed 's/test/exam/w data2' 处理后的数据写入data2中
遇到特殊字符,特殊处理!
2.2使用地址
默认情况下,sed编辑器中的命令会作用于所有行,若想只作用于特定某行或某些行,必须用行寻址
sed编辑器的2中行寻址
行的数字范围
用文本模式来过滤出某行
命令格式: address command 也可以多行
举栗子
2.3删除行命令d
sed编辑器不会修改原始文件,删除的行只是从sed编辑器的输出中消失了。
2.4插入i和附加a文本命令
插入(insert)命令i会在指定行前增加一个新行
追加(append)命令会在制定行后增加一个新行
2.5修改行C
与插入和附加类似,修改数据流中的整行文本。
2.6转换命令y
转换命令y是唯一可以处理单个字符的sed编辑器命令,
格式: addressy/inchars/outchars/ 其中inchars和outchars值一对一映射,inchars中第一个地府转换成outchars中第一个字符,以此类推
y转换命令是一个全局命令,它会自动转换文本中找到的所有匹配值,无法限定只更改该字符出现的某个地方
2.7打印命令p = l
p打印出sed编辑器输出中的一行
=打印行号
l用来列出行,允许打印文本和不可打印的ASCII字符 \t 等
2.8 sed与文件一起工作写w读r
格式:addressw filename filename文件必须有写的权限
addressr filename filename文件必须有读的权限
文件读文件的命令r filename 可以与删除命令d一起使用,替换占用文本
sed options script file
sed 命令选项
选项 | 描述 |
-e script | 在处理输入时,将script中指定的命令加载到运行命令中 |
-f file | 在处理输入时,将file文件中指定的命令加载到运行命令中 |
-n | 不要为每个命令生成输出,等待print命令来输出 |
2.1替换选项s
基本格式:s/para1/para2/ s命令会用斜线间隔文本字符串,第二个代替第一个 一般只替换掉一行中匹配的第一个文本字符串
1.处理一行文本 $echo "this is a test test" | sed 's/test/exam/' this is a exam test 2.处理一个文件中的多行文本 $cat data1 this is a test this is a test this is a test $sed 's/test/exam/' data1 this is a exam this is a exam this is a exam 3.使用多个编辑命令 $sed -e 's/this/that/; s/test/exam/' data1 #用;号隔开,前一个命令末尾和分好之间不能有空格 that is a exam that is a exam that is a exam 也可以改为 $sed -e ' >s/this/that/ >s/test/exam/' data1 #引号开始引号结束 that is a exam that is a exam that is a exam 4.从文件中读取编辑命令 $cat script1 s/this/that/ s/test/exam/ $ sed -f script1 data1 that is a exam that is a exam that is a exam
用替换标记flag的格式: s/pattern/replacement/flags
flags有4种:
数字,表明新文本将替换第几处模式匹配的地方 sed 's/test/exam/2'
g,表明新文本将会替换所有已有文本出现的地方 sed 's/test/exam/g'
p,原来的行的内容要打印出来,一般与-n一起用,只打印匹配的行 sed 's/test/exam/2'
w file,将替换的结果写到文件中 ,sed 's/test/exam/w data2' 处理后的数据写入data2中
遇到特殊字符,特殊处理!
$sed 's/\/bin\/bash/\bin\/dash' /etc/passwd #用!代替/之后的命令:容易读取和理解,注意最后一个! $$sed 's!/bin/bash!bin/dash!' /etc/passwd
2.2使用地址
默认情况下,sed编辑器中的命令会作用于所有行,若想只作用于特定某行或某些行,必须用行寻址
sed编辑器的2中行寻址
行的数字范围
用文本模式来过滤出某行
命令格式: address command 也可以多行
address { command1 command2 command3 }
举栗子
$cat data2 You are a girl 1 I am a girl 2 I am a girl 3 I am a girl 4 #替换一行 $sed '2s/girl/boy/' data2 You are a girl 1 I am a boy 2 I am a girl 3 I am a girl 4 #替换多行用逗号分隔 $sed '2,3s/girl/boy/' data2 You are a girl 1 I am a boy 2 I am a boy 3 I am a girl 4 #替换到最后一行用$命令 $sed '2,$s/girl/boy/' data2 You are a girl 1 I am a boy 2 I am a boy 3 I am a boy 4 #文本匹配 $sed '/You/s/girl/boy/' data2 You are a boy 1 I am a girl 2 I am a girl 3 I am a girl 4 #组合命令 $sed '2{ >s/I/You/ >s/am/are/ >s/girl/boy/ >}' data2 You are a boy 1 You are a boy 2 I am a girl 3 I am a girl 4
2.3删除行命令d
sed编辑器不会修改原始文件,删除的行只是从sed编辑器的输出中消失了。
#删除一行 $sed '3d' data2 #删除第2行 You are a girl 1 I am a girl 3 I am a girl 4 $sed '2,3d' data2 #删除第2.3行 $sed '3,$d' data2 #删除第3到最后行 $sed '/You/d' data2 #删除You所在行 #注意,删除用两个文本模式来匹配的行时,第一个匹配模式打开删除功能,第二个匹配模式关闭删除功能,两个匹配模式之间的行都会被删 $sed '/1/,/3/d' data2 I am a girl 4
2.4插入i和附加a文本命令
插入(insert)命令i会在指定行前增加一个新行
追加(append)命令会在制定行后增加一个新行
$sed '3i\you are a dog' data2 #\去掉后,执行结果一样,为阅读方便,加\ You are a boy 1 I am a girl 2 you are a dog I am a girl 3 I am a girl 4 $sed '3a\you are a dog' data2 You are a boy 1 I am a girl 2 I am a girl 3 you are a dog I am a girl 4
2.5修改行C
与插入和附加类似,修改数据流中的整行文本。
$sed '3c\you are a dog' data2 #\去掉后,执行结果一样,为阅读方便,加\ You are a boy 1 I am a girl 2 you are a dog I am a girl 4 $sed '2,3c\you are a dog' data2 #将2个匹配模式之间的行换成要替换的文本。 You are a boy 1 you are a dog I am a girl 4
2.6转换命令y
转换命令y是唯一可以处理单个字符的sed编辑器命令,
格式: addressy/inchars/outchars/ 其中inchars和outchars值一对一映射,inchars中第一个地府转换成outchars中第一个字符,以此类推
$sed 'y/123/678/' data2 #\去掉后,执行结果一样,为阅读方便,加\ You are a boy 6 I am a girl 7 I am a girl 8 I am a girl 4
y转换命令是一个全局命令,它会自动转换文本中找到的所有匹配值,无法限定只更改该字符出现的某个地方
$echo "this 1 is a test 1" | sed 'y/123/456/' this 4 is a test 4
2.7打印命令p = l
p打印出sed编辑器输出中的一行
=打印行号
l用来列出行,允许打印文本和不可打印的ASCII字符 \t 等
$sed '=' data2 #\去掉后,执行结果一样,为阅读方便,加\ 1 You are a boy 1 2 I am a girl 2 3 I am a girl 3 4 I am a girl 4 $sed -n 'l' data2 #会打印出本句结束符$ You are a boy 1$ I am a girl 2$ I am a girl 3$ I am a girl 4$
2.8 sed与文件一起工作写w读r
格式:addressw filename filename文件必须有写的权限
addressr filename filename文件必须有读的权限
$sed -n '2,3w test' data2 $cat test I am a girl 2 I am a girl 3 $sed '3r test' data2 You are a girl 1 I am a girl 2 I am a girl 3 I am a girl 2 #注意这里是从test读出来的 I am a girl 3 I am a girl 4
文件读文件的命令r filename 可以与删除命令d一起使用,替换占用文本
$ cat letter There are those people: LIST will come to school. $ sed '/LIST/{ #data3中存放着3行数据分别为John May Shliy >r data3 #注意:r和d不能交换位置,否则不成功 >d >}' letter There are those people: John May Shliy will come to school.
相关文章推荐
- <c:forEach>详解
- 不多于5位数的正整数1、求出它是几位数;2、按逆序打印出各位数字。
- php 编程笔记分享 - 非常实用
- php 编程笔记分享 - 非常实用
- 相对准确的java程序性能测试实现方案
- 基因数据处理28之avocado运行
- Linux内核编程五:内存管理
- hadoop2.5.x搭建集群启动jps在datanode节点无法显示datanode
- 为了一些不为什么的坚持
- android环境搭建
- Sicily1222——单词选择
- 数据库连接工具类
- 挑逗小火绒
- 系统uid在1-499的原因
- Start Developing iOS Apps (Swift) 中文翻译版
- grub2 中添加windows7的启动项
- 使用极光推送的方法
- TOPCODER SAM 686 div1 300
- 基于spring3.0的springmvc的ajax数据请求
- Linux内核编程四:嵌入式linux系统构建