sed简介

例子在最下方,大家可以直接拉下去看。

什么是sed

Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑器。能同时处理多个文件多行的内容,可以不对原文件改动,把整个文件输入到屏幕,可以把只匹配到模式的内容输入到屏幕上。还可以对原文件改动,但是不会再屏幕上返回结果。

sed的用法

命令

sed [option] ‘[action]’ 文件名

参数

可选参数

解释

-n

只打印模式匹配的行

-e

直接在命令行模式上进行sed动作编辑,此为默认选项

-f

将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作

-r

支持扩展表达式

-i

直接修改文件内容

操作

sed默认打印所有的内容。

action

解释

d

删除,删除选择的行

D

删除模板块的第一行

s

替换指定字符

h

拷贝模板块的内容到内存中的缓冲区

H

追加模板块的内容到内存中的缓冲区

g

获得内存缓冲区的内容,并替代当前模板块中文本

G

获得内存缓冲区的内容,并追加到当前模板块文本的后面

l

列表不能打印字符的清单

n

读取下一个输入行,用下一个命令处理新的行而不是第一个命令

N

追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码

p

打印模板块的行

P

打印模板块的第一行

q

退出sed

b label

分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾

r file

从file中读行

t label

if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾

T label

错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾

w file

写并追加模板块到file末尾

W file

写并追加模板块的第一行到file末尾

!

表示后面的命令对所有没有被选定的行发生作用

=

打印当前行号

#

把注释扩展到第一个换行符以前

替换

sed -i 's/匹配正则/替换对象/[lable]'

 label

lable

说明

g

表示行内全面替换

p

表示打印行

w

表示把行写入一个文件

x

表示互换模板块中的文本和缓冲区中的文本

y

表示把一个字符翻译为另外的字符(但是不用于正则表达式)

\1

子串匹配标记

&

已匹配字符串标记

正则

正则

说明

^

匹配行开始,如:/^sed/匹配所有以sed开头的行。

$

匹配行结束,如:/sed$/匹配所有以sed结尾的行。

.

匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。

*

匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。

[]

匹配一个指定范围内的字符,如/[sS]ed/匹配sed和Sed。

[^]

匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。

(..)

匹配子串,保存匹配的字符,如s/(love)able/\1rs,loveable被替换成lovers。

&

保存搜索字符用来替换其他字符,如s/love/&/,love这成love

<

匹配单词的开始,如:/<love/匹配包含以love开头的单词的行。

 >

匹配单词的结束,如/love>/匹配包含以love结尾的单词的行。

x{m}

重复字符x,m次,如:/0{5}/匹配包含5个0的行。

x{m,}

重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行。

x{m,n}

重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行。

例子

精准匹配修改

SREM命令模糊匹配 sed模糊匹配_shell

模糊匹配修改

SREM命令模糊匹配 sed模糊匹配_shell_02

 在sed中使用变量

如果只需要在sed中使用变量需要将'转为"。

例如:

sed -ie "s/rdb.url=.*/$RDB_URL/g" $DECODE_DB_PROP_PATH

这表示将文件中所有以rdb.url=开头的行全部替换为变量RDB_URL的内容。

在这里需要注意:URL中/和&需要加\进行转义。

RDB_URL="rdb.url=jdbc:xugu:\/\/$FIRST_BFDB_HOST:5138\/BABJ_BFDB?ips=$SECOND_BFDB_HOST\&char_set=utf8"