Shell 学习6(sed命令)
来源:互联网 发布:java免费快速开发平台 编辑:程序博客网 时间:2024/06/04 00:22
Sed 命令
sed 的基本用法sed(stream editor)是流编辑器,可对文本文件和标准输入进行编辑。sed只是对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件,如果需要保存改动内容,可以选择使用两种方法:重定向 w编辑命令
Sed命令选项:
-n
不打印所有行到标准输出
eg
sed -n '1p' sed1
结果:this is the first line
eg :
sed '1p' sed1
结果:this is the first line (匹配的文本行 ,但后又将整个文本全部打印了出来)
this is the first line
haha this is the second
3 my name is anders
Number four 4
How are you doing?
-e
表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以省略
eg: 要查询 this关键字所在的行号
sed -n '/this/=' sed1 ( = 表示所在行号)
结果: 1
2
如果要查询所在行 以及所在行的内容 则需要执行两条sed命令,所以需要用到-e
eg: sed -n -e '/this/p' -e '/this/=' sed1 ( p 表示所在行的内容)
结果:
this is the first line
1
haha this is the second
2
-f
表示正在调用sed脚本文件
Sed 文本定位方法
x
x为指定行号
x,y
指定从x到y的行号范围
/pattern/
查询包含模式的行
/pattern/pattern/
查询包含两个模式的行
/pattern/,x
从与pattern的匹配行到x号行之间的行
x,/pattern/
从x号行到与pattern的匹配行之间的行
x,y!
查询不包括x和y行号的行
Sed 编辑命令:
选项 意义
p 打印匹配行
= 打印文件行号
a\ 在定位行号之后追加文本信息
i\ 在定位行号之前插入文本信息
d 删除定位行
c\ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 将文本写入到一个文件
y 变换字符
q 第一个模式匹配完成后退出
l 显示与八进制ASCII代码等价的控制字符
{} 在定位行执行的命令组
n 读取下一个输入行,用下一个命令处理新的行
h 将模式缓冲区文本拷贝到保持缓冲区
H 将模式缓冲区文本追加到保持缓冲区
x 互换模式缓冲区和保持缓冲区内容
g 将保持缓冲区内容拷贝到模式缓冲区
G 将保持缓冲区内容追加到模式缓冲区
eg :
1 查询 sed -n '$p' file1 查询 最后一行
2 sed -n '2,5p' file1 查询文件的2到5行
3 sed -n '2,5!p' file1 查询文件的除了2到5行之外的
4 sed -n '/this/,$p' file1 表示从找到this所在行 一直到最后一行
5 sed -n '2,/this/p' file1 从第二行一直到匹配this这行
sed 基本编辑:
1 追加文本 : 匹配行后面插入
2 插入文本 在匹配行前面插入
3 修改文本 将所有匹配的文本利用新文本替代
4 删除文本 指定行或指定行范围进行删除
eg:
在b.txt的第2行之前插入“xxx”
sed '2 i xxx' b.txt
在b.txt的第2行之后插入“xxx”
sed '2 a xxx' b.txt
在b.txt的第2行和第3行之后插入“xxx”
sed '2,3 a xxx' b.txt
在b.txt的第2行和第3行之前插入“xxx”
sed '2,3 i xxx' b.txt
在b.txt的第2行至最后一行之前插入“xxx”
sed '2,$ i xxx' b.txt
总结
在指定行之前插入使用的是“i”,而在指定行之后插入是使用“a”
eg : sed '1,10d' file1
删除file1的第一行到第十行
set 基本编辑
set 替换文本操作
sed 替换文本与 修改文本的区别:
替换文本可以替换一个字符串,而修改文本是对整行进行修改
选项 意义
s 命令将替换后的全部文本都输出,如果只打印
出替换行,需奥结合-n和p选项,命令格式如下(默认替换只是替换该行第一个匹配的!!!)
sed -n 's/被替换的字符穿/新字符串/p' 输入文件
g 表示替换文本中所有出现被替换字符串之处
p 与-n选项结合,只打印替换行
w 文件名 表示将输出定向到一个文件
g ---> globel
默认情况下
eg: sed 's/anders/ANDERS/' sed1 这样将所有的文本都打印出来了
eg : sed -n 's/anders/ANDERS/p' sed1 只将替换的那些行打印出来
g选项 : 替换文本中所有出现被替换的字符串之处
eg : sed -n 's/i/I/pg' sed1 将sed中所有的i换成I
w 选项 文件名表示输出定向到这个文件,与sed编辑命令的w是不矛盾的(只是将 修改的那部分 输出到 另一个文件!!!!!!)
eg :
sed -n 's/anders/ANDERS/w file2' file1
将file1中的anders替换城ANDERS 然后将替换之后的所在行输出到file2文件
eg
sed -n '1,3 w file2' file1
将file1文件中的1到3行输入到file2文件
-r 选项 :从文件中读入文本
sed '/anders/r sed2' sed1
在sed1中查找匹配 anders ,找到后在所在行后面添加 sed2文件中的内容
nihao
hao
ni
anders
file2file2file2
anders is coding
file2file2file2
Anders
ANDERS
anders anders anders
file2file2file2
(红色部分是 从file2中读入的!!!)
-q 选项:退出命令 表示在完成指定地址的匹配后立即退出:
sed '/anders/q' sed1
在找到anders所在行之后立即退出
结果:
this is the first line
haha this is the second
3 my name is anders
退出了!!
变换命令
-y 表示字符变换,它将一系列的字符变换为相应的字符
sed 'y/被变换的字符/变换的字符' 输入文件
(前提 变化的字符要与被变换的字符等长!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
eg : sed 'y/anders/ANDERS/' sed1 (这个的意思是将 文件中的 所有的a 变换城A, n->N d->D e->E ……而不是将anders变换城ANDERS , 如果文件中有单词: this 会变成thiS的 因为要将s变成S )
eg
文件内容:
anders aaa
执行命令:sed 'y/anders/ANDERS/' file
结果:ANDERS AAA
{}符号可以指定在定位行上所执行的命令组
与-e 选项类似
eg :
sed -n '/anders/{p;=}' sed1 将行号和内容打印出来 中间是;分号
等价与:sed -n -e '/anders/p' -e '/anders/=' sed1
- Shell 学习6(sed命令)
- shell脚本学习-6(sed命令学习)
- shell脚本学习-5(sed命令学习)
- shell脚本学习-7(sed命令学习)
- shell脚本学习-8(sed命令学习)
- shell学习之sed命令补充
- shell学习之cut,sed命令
- linux shell用法(6)-- sed - i 命令
- shell-----sed命令详解
- shell sed 命令操作手册
- shell 之 sed命令
- shell sed 命令操作手册
- 【shell】sed命令详解
- shell 中的 sed 命令
- shell sed命令
- Shell—sed命令
- shell----sed命令详解
- shell-----sed命令详解
- SQL Server2005重装Performance Monitor Counter Requirement错误解决
- oracle的查询
- jQuery的基本特性和基本概念
- C++ copy constructor 构建
- matlab中变量名与函数名相同时程序有危险
- Shell 学习6(sed命令)
- oracle 用户管理
- Oracle 的基本使用--基本命令
- YF项目SAP故障诊断问题
- Android开发中StackOverflowError错误实例分析
- 设计模式之创建型模式
- Visual C++ 编程命名规则总结
- Tomcat 6 Missing Host Header Internal IP Address Disclosure
- winform 移动窗口中的控件,panel