[原创]sed 命令介绍及举例_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2923 | 回复: 0   主题: [原创]sed 命令介绍及举例        下一篇 
panpan.nie
注册用户
等级:大校
经验:4754
发帖:217
精华:2
注册:1970-1-1
状态:离线
发送短消息息给panpan.nie 加好友    发送短消息息给panpan.nie 发消息
发表于: IP:您无权察看 2014-10-16 18:26:11 | [全部帖] [楼主帖] 楼主

前言

我们常会对文件内容进行的处理不外乎,查找和修改两种,在Unix中常用来实现这个功能的命令是 grep ,sed, awk

它们最常被用到的功能介绍:

     grep  在文件中查找某个字符串,输出包含该字符串的行

     sed    对文件中满足某条件的数据一行一行的进行处理,比如:打印第几行数据,替换字符串

     awk   对文件的一列一列的进行处理,比如,以空格分割打印第几列数据

这里主要介绍:sed命令

sed 查找和编辑文本,是一个字符流编辑器,可以很好地完成对多个文件的一系列编辑工作

必须通过行号或正则表达式指定要改变的文本行

执行方式

1、命令行键入命令   

2、将sed命令插入脚本文件,然后调用sed

3、将sed命令插入脚本文件,并使sed脚本可执行

选项

-n 不打印

p 打印编辑行

-c 下一个命令是编辑命令

    -e 多个匹配

-w 写文本到一个文件

    -i 添加

保存改动的内容到文件,使用重定向

使用sed在文件中定位文本的方式

x x为一行号,如1

x,y 表示行号范围从x到y,如2,5表示从第2行到第5行

/pattern/ 查询包含模式的行。例如/disk/或/[a-z]/

/pattern/pattern/ 查询包含两个模式的行。例如/disk/disks/

/pattern/,x 在给定行号上查询包含模式的行。如/disk/,3

x,/pattern/ 通过行号和模式查询匹配行。3,/disk/

x,y ! 查询不包含指定行号x和y的行。1,2 !

基本sed编辑命令

f 在脚本文件中有sed命令时使用

p 打印匹配行

= 显示文件行号

a\ 在定位行号后附加新文本信息,附加

i\ 在定位行号后插入新文本信息,插入

d 删除定位行,删除

c\ 用新文本替换定位文本,替换

s 使用替换模式替换相应模式

r 从另一个文件中读文本

w 写文本到一个文件

q 第一个模式匹配完成后推出或立即推出

l 显示与八进制A S C I I代码等价的控制字符

{ } 在定位行执行的命令组

n 从另一个文件中读文本下一行,并附加在下一行

g 全局替换

y 传送字符

n 延续到下一输入行;允许跨行的模式匹配语句

sed识别任何基本正则表达式和模式及其行匹配规则。记住规则之一是:如果要定位一特

殊字符,必须使用( \)屏蔽其特殊含义

编程举例

sed -n '2p' quote.txt #只打印第二行  -n 显示打印定位行
sed -n '1,3p' quote.txt #打印1-3行
sed -n '/Neave/'p quote.txt  #打印匹配单词Neave的行
sed -n '1,/The/'p quote.txt #原意,在第一行查询模式The ,实际未得到预期结果


使用模式和行号进行查询 未成功

sed -n '/\$/'p quote.txt    #查询包含$的行,特殊字符前需要使用转义字符'\'屏蔽其特殊含义
sed -n '3,$p' quote.txt  #打印3到最后一行,$为最后一行的意思
sed -n '/.*ing/'p quote.txt #查询以ing结尾的任一单词所在行,.* 任意多个任意字符
sed -n '$p' quote.txt#打印最后一行
sed -e '/music/=' quote.txt #打印所有内容,并在匹配行前一行打印行号。 
sed -n '/music/=' quote.txt #只打印匹配行号。= 显示出行号
sed -n -e '/music/p' -e '/music/=' quote.txt #打印匹配行和行号
sed '1,$d' quote.txt #删除1到最后一行,原始文件不变,只是显示在屏幕上的字符没有这些行而已
sed '/company/d' quote.txt #匹配删除
sed 's/night/NIGHT/' quote.txt #用NIGHT替换第一个匹配的night
sed 's/night/NIGHT/g' quote.txt #用NIGHT替换全部匹配的night
sed 's/\$//' quote.txt #将字符$删除,因为没有用任何字符来替换
sed -n 's/nurse/"Hello" &/p' quote.txt  #修改模式后带 &,将其放在匹配模式之前
sed 's/[0-9][0-9]*/& Passed/g' une.txt  #修改模式前带&,将其放在匹配模式之后


可以理解为& 是为匹配模式占位

sed 's/The/Hi!/w sed.out' quote.txt  #用Hi!替换The显示替换后的所有文本,


并将修改了的行写入sed.out中,文件名在单引号中,w写

sed '1,2 w send.out' quote.txt #将1,2行内容写入send.out
sed '/good/ w send.out' quote.txt #将匹配行内容写入send.out
sed '/company/r file' quote.txt #将将文件file中的内容插入在匹配行后
sed '/.a.*/q' quote.txt#查询模式首次出现行,并退出
sed -i '/world/s/jint/jjjjjjj/g' test.sh


sed -i 's/jint/jjjjjjj/g' test.sh   同时替换了文件本身内容

sed 为从另一个系统中下载的文件剔除控制字符。

产生控制字符(^M)的方法,先按ctrl+v ,然后按Enter

cat dos.txt sed 's/^0*//g' sed 's/^M//g' sed 's/##/ /g'
#将dos.txt文件,删除行首的任意个0,删除控制字符,并用空格替换##
cat a.txt sed 's/--*//g' \  # '\' 是命令未完,还有下一行
> sed '/^$/d' sed '$d' sed '1d' awk '{print $1}'
#将a.txt文件,删除--*表示的横线,删除空行^行首、$行尾,删除最后一行,
#删除第一行,打印第一列


echo $NAME sed "s/go/$REPLACE/g" 要从shell将变量REPLACE的值传入sed,需要使用双引号“”

NEW_NAME=`echo $NAME sed "s/go/$REPLACE/g"`
#从sed输出中设置shell变量,相当于执行完sed命令,使用执行符 ``




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论