sed基础一

Sed是一种面向字符流的编辑器。处理文件时,sed把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾,一次只处理文件中一行的拷贝。文件内容并没有改变,除非你使用重定向存储输出。

Sed同时维护着模式空间(pattern space)和保持空间(hold space),可以将模式空间的内容复制到保持空间并在以后检索它们。


调用sed命令有两种形式

sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)

 

 

 

常用的options

-e command, --expression=command   允许多点编辑。
-n, --quiet, --silent    取消默认输出。
-f, --filer=script-file   引导sed脚本文件名

 

 

使用的基础command及示例

1   [address]s/pattern/replacement/flags  ---substitution
用string替换正则表达式re。

 以下的是替换标记flags
g表示行内全面替换。
p表示打印行。
w表示把行写入一个文件。

示例:sed -i 's/old/new/g' file  GNU sed version 4.0.5以上带有-i选项

 

2  d  [ a d d r e s s [,a d d r e s s ] ] d---delete
从模式空间(Pattern space)位置删除匹配行。

示例:
$sed '1d' quote.txt
It was an evening of splendid music and company.
Too bad the disco floor fell through at 23:00.
The local nurse Miss P.Neave was in attendance
$ sed '1,3d' quote.txt
The local nurse Miss P.Neave was in attendance.
$sed /^$/d 删除空行

 

3 追加 插入 更改
a  ---append
在当前行后面加入一行文本。

i  ---insert
在当前行上面插入文本。

c  ---change
用新的文本改变本行的文本。它清除模式空间的内容,类似d命令的效果

append [line-address]a\
text
insert [line-address]i\
text
change [address]c\
text

 

4   l ---list
显示模式空间内容,将非打印的字符显示为两个数字的ascii码。

$ cat test/spchar
Here is a string of special characters: ^A  ^B
^M ^G
$ sed -n -e "l" test/spchar
Here is a string of special characters: \01 \02
\15 \07
$ # test with GNU sed too
$ gsed -n -e "l" test/spchar
Here is a string of special characters: \01  \02
\r \a


5    y  [address]y/abc/xyz/  ---Transform
按位置将abc中的每个字符转换成xyz中的

转换成大写
y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/


6    p   ---print
打印模式空间的行。
=
打印被匹配行的行号。
q  [line-address]q---quit
退出Sed。

 

7    n   [address]n  ---next
输出模式空间内容,然后读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。不返回脚本顶端。

 

 

附录:sed正则表达式元字符集


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

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

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

*
匹配零或多个字符 如:/*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个o的行。

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值