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


原创粉丝点击