sed的常用语法总结及示例

Sed的基本用法


概念及作用

sed和grep类似,也是一种文件编辑器
sed是一个流编辑器,所谓流编辑器是指sed每次只从文件或stdin中读入一行,将读入的行保存至模式空间然后根据指定的要求对其进行处理,并将处理后的结果输出至屏幕,接着读入下一行,整个文本的过程如流水线般被逐行处理后输出。
sed主要用来自动编辑一个或多个文件,可以将数据进行增删改查等特定工作,简化对文件的反复操作.


格式

sed [参数] ‘命令’ 文件


参数

-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
-i :直接修改文件内容,(没有备份时慎重操作);
-n :只打印模式匹配的行,与grep相似
-r :支持扩展表达式;


命令

a\ 在当前行下面插入文本;
i\ 在当前行上面插入文本;
c\ 把当前行改为新的文本;
d 删除,将选择的内容删除
D 删除模板第一行
s 替换指定字符 (最常用)
p 打印模板块的行。(常常和 -n配合使用)
P 打印模板块的第一行;


标记

g 表示行内全部替换,ng表示第n个匹配的开始进行替换
w 表示把行写入一个文件
\1 字串匹配标记(划重点)
& 已匹配字符串标记


部分测试

1. 替换

echo book | sed 's/book/books/'
将book替换为books

在这里插入图片描述

先将777和test写入到cs文件中,然后使用 sed命令将test替换为TEST,再用-n p 组合查看
sed 's/test/TEST/' cs
sed -n 's/test/TEST/p' cs

在这里插入图片描述
可以看到,通过使用-n p 运行sed之后就只显示经过修改的结果.


2. 全局替换

echo sksksksksksk | sed 's/sk/SK/ng'

在这里插入图片描述这里能看出g的作用,
当n=1时,这段代码就是将每一个sk替换为SK,
为2时,从第二个开始的sk换为SK
以此类推
ng就是从第n个开始,将字符进行替换


3. 删除

拷贝一份passwd,添加几个空行

在这里插入图片描述

sed '/^$/d' passwd | head -10 删除空白行

在这里插入图片描述

接着对没有空白行的文本进行操作
删除第二行
sed '2d' passwd

在这里插入图片描述

sed '2,$d' passwd删除第二行之后的所有(包括第二行)

在这里插入图片描述
从这里可以发现’n,md’是删除n-m行(包括n和m)


字符串标记

在正则中,用\w\+匹配每一个单词
在sed中,&则表示匹配到的字符
echo "this is a test line" | sed 's/\w\+/[&]/g'

在这里插入图片描述这个命令用来给匹配到的每一个单词加上[]


子串匹配(重点)

我们假定a b c d 为一个字符串,那么a b c d 则为 a b c d的四个子串
在搞懂这个概念之后,进行如下命令
echo a b c d | sed 's/\([a-z]\) \([a-z]\) \([a-z]\) \([a-z]\)/\4/'

在这里插入图片描述
这一段命令是分别匹配了a b c d的四个子串,然后输出第四个子串

echo a b c d | sed 's/\([a-z]\) \([a-z]\) \([a-z]\) \([a-z]\)/\4\3\2\1/'

在这里插入图片描述而这一段命令则是将匹配的子串倒序输出,且中间没有隔断

echo a b c d | sed 's/\([a-z]\) \([a-z]\) \([a-z]\) \([a-z]\)/\4,\3,\2,\1/'

在这里插入图片描述这一段则是用’,'隔开

对子串进行一个剖析

在这里插入图片描述这后面的\4\3\2\1分别对应子串4,子串3 ,子串2,子串1

另外,子串的匹配方式应和原文本保持一致,不然会匹配不到


选定范围

在sed中,范围的用’,(逗号)’
例如我们前面的删除第二行之后的所有就用了2-$($和以前一样,表示结尾,同样^和以前一样表示开头)
在passwd中添加一行test
在这里插入图片描述
打印从第5行开始一直到第一个以test开头的行之间的所有内容
sed -n '5,/^test/p' passwd

在这里插入图片描述


追加

追加分为行上(a),行下(i),本行

行上追加

就是在匹配到的行前面一行进行追加操作
sed '/^test/i\777' passwd

在这里插入图片描述在以test开头的行前追加 ‘777’

行下追加

在匹配到的行下面一行进行追加
sed '/^test/a\777' passwd

在这里插入图片描述这里是在以test开头的行下面一行追加777

本行追加

本行追加又有在匹配到的字符后直接追加和在行尾追加两种

  • 字符后追加
    sed 's/^test/&777/' passwd

在这里插入图片描述这里使用了&代表匹配到的test

  • 在行末追加
    sed '/test/s/$/777/' passwd

在这里插入图片描述
这里是先对test匹配,然后在末尾使用替换命令,就可以完成在行末追加内容的操作


各种正则也适用于sed表达式
sed主要用于文件的行处理,列处理我们常用的是awk,后面还会对awk进行学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值