sed
来源:互联网 发布:二级域名 不同端口 编辑:程序博客网 时间:2024/06/06 19:21
sed编辑器
流编辑器,在编辑器处理数据之前基于预先提供的一组规则来编辑数据流,每次从输入中读取一行,用提供的编辑器命令匹配数据、按命令中指定的方式修改流中的数据,然后将生产的数据输出到STDOUT,在流数据将所有命令与一行数据匹配后,它会读下一行数据并重复这个过程,在流编辑器处理完流中的所有数据行后,它就会终止。
set options screipt file
s命令用斜线间指定的第二个文本字符串来替换第一个文本字符串
echo "This is a test" | sed 's/test/BIG TEST/'
-e执行多个命令
cat data1sed -e 's/brown/green/' -e 's/dog/cat/' data1
从文件中读取编辑器命令
cat script1sed -f script1 data1
替换标记
数字:表明新文本将替换第几处模式匹配的地方
g:表明新文本将会替换所有已有文本出现的地方
p:表明原来行的内容要打印出来
w:将替换的结构写到文件中
cat data5
sed 's/test/trial/2' data5 #替换每行的第二处
sed 's/test/trial/g' data5
sed -n 's/test/trial/p' data6 #打印与指定的模式匹配的行.-n进制sed编辑器输出
sed -n 's/test/trial/w test' data6 #不输出到stdout,输出到test文件替换字符
转义字符\
sed 's/\/bin\/bash/\/bin\/csh/' /etc/passwd用!作为字符串分隔符
s!/bin/bash/!/bin/csh!' /etc/passwd
使用地址
默认情况下,sed编辑器中的命令会作用于文本数据的所有行,如果只想将命令作用于特定某些行,必须使用行寻址
[address]commandaddress{ command1 command2 command3}
eg. 指定行
sed '2s/dog/cat/' data1
eg.使用行地址范围
sed '2,4s/dog/cat/' data1 #第2行到第4行
eg.作用到文本结尾
sed '2,$s/dog/cat/' data1
使用文本模式过滤器
/pattern/command #只会作用到包含指定文本模式的行上
sed -n '/root/s/bash/csh/p' /etc/passwd
组合命令
sed '2{ #作用到第二条命令上 s/fox/elephant/ s/dog/cat/ }' data1
sed '3,${ #作用到第3行到文本尾 s/fox/elephant/ s/dog/cat/ }' data1
删除行
eg 删除某个范围的行
sed 'd' data1 #删除所有行
sed '3d' data7 #删除第3行
eg删除匹配某个模式的行
sed '/line number 2/d' data7 #删除与pattern匹配的行
eg. 删除两个模式范围内的行,第一个模式打开行删除功能,第二个模式关闭行删除功能
cat data8sed '/1/,/3/d' data8
附加和插入文本
"Test line 2" | sed 'i\Test line 1' #使用插入命令时,文本会出现在数据流文本前面
echo "Test line 2" | sed 'a\Test line 1' #使用附加命令时,文本会出现在数据流文本后面
'3i\This is an inserted line.' data7 #插入到文本第3行
sed '$a\This is a new line of text.' data7
修改行
sed '3c\This is a changed line of text.' data7
sed '/number 1/c\This is a changed line of text.' data8 #修改模式匹配的行
转换命令
唯一可以处理单个字符的编辑器命令
[address]/inchars/outchars/ #inchars和outchars会进行一对一映射
sed 'y/123/789/' data8
回顾打印
sed -n '/number 3/p' data7
在修改之前显示行
sed -n '/3/{p #修改之前打印s/line/test/p #修改之后打印}' data7
打印行号
sed '=' data1
-n '/number 4/{= #打印行号p}' data74
使用文件
向文件写入
[address] w filename
sed '1,2w test' data7cat test
从文件中读取数据
[address] r filename
sed '3r data12' data7
sed '/number 2/r data12' data7
0 0
- sed
- Sed
- SED
- sed
- sed
- sed
- sed
- sed
- sed
- Sed
- sed
- sed
- sed
- sed
- sed
- sed
- sed
- sed
- The Tourist Guide
- cgroup与dpdk启动
- uva490 Rotating Sentences
- 安卓自定义简单的Title标题栏(仿iPhone样式)
- Spring学习笔记1-JavaBean
- sed
- 日期格式yyyy-MM-dd和YYYY-MM-dd有什么区别?
- eclipse 新建类自动生成注释信息
- Android中Activity四种启动方式
- Nginx开发一个简单的HTTP过滤模块
- 轻松搭建ES6开发环境
- Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码
- codeforces B. Mike and strings
- 设置基本运行时间与内存分配