共计 1841 个字符,预计需要花费 5 分钟才能阅读完成。
sed 是一种流编辑器,它是文本处理中非常强大的工具,能够完美的配合正则表达式使用,用法简单实用,非常灵活。
工作原理:sed 命令处理文本时,把当前处理的行存储在一个临时缓冲区中,称为“模式空间”(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
在 sed 高级编辑命令中,还会调用另一个临时缓冲区,称为“保持空间”(hold space),在模式空间中为处理完的行可以临时存储在保持空间中,在临时空间接着处理下一行,然后在将保持空间中的行重新存储在临时空间中做后续处理,这样就使得 sed 命令变的功能得更为强大。
sed 命令不仅可以查看,筛选文本内容,还可以对一个或多个文本进行编辑,更改,简化对文件的反复操作。
sed 中有自己的脚本命令 ,配合这些脚本文件,sed 可以实现许多对文本的索引,编辑功能。
sed 命令常用选项:sed [option]‘script’file
option:
-n:不输出模式空间内容到屏幕,即不自动打印
-e:多点编辑
-f:/ PATH/SCRIPT_FILE:从指定文件中读取编辑脚本
-r:支持使用扩展正则表达式
-i:修改源文件
-i.bak:备份文件并原处编辑
-v:打印版本和版权信息。
script:’地址 + 命令’
地址:
- )没有地址:默认对全文进行处理。
- )单地址:
X:指定的行
/pattern/:被匹配到的每一行 - )地址范围:
X1,X2:选取第 X1 行到 X2 行之间的行
X1,+X2:选取第 X1 行之后的 X2 个行
/pat1/,/pat2/:选取 pat1 第一次匹配到的行到 pat2 第一次匹配到的行之间的行
X,/pat1/:选取 X 第一次匹配到的行到 pat1 第一次匹配到的行 - )X1~X2:步进
1~2:从 1 开始,步进为 2(奇数行)
2~2:从 2 开始,步进为 2(偶数行)
命令:
d:删除模式空间匹配的行,并立即启用下一轮循环
p:打印当前模式空间内容,追加到默认输出之后
a []text:在指定行后面追加文本。支持使用 n 实现多行追加
i []text:在行前面插入文本
c []text:替换行为单行或多行文本
w:保存模式匹配的行至指定文件
r:读取指定文件的文本至模式空间中匹配到的行后
=:为模式空间中的行打印行号
!:模式空间中匹配行取反处理
s/X/X/g:查找替换, 支持使用其它分隔符,s@@@,s###
y/XX/XX/:检索所有匹配的项,替换为对应的字符
高级编辑命令:
P:打印模式空间开端至 n 内容,并追加到默认输出之前
h:把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g:从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x:把模式空间中的内容与保持空间中的内容进行互换
n:读取匹配到的行的下一行覆盖至模式空间
N:读取匹配到的行的下一行追加至模式空间
d:删除模式空间中的行
D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本
#:把注释扩展到下一个换行符以前。
案列
基本用法:
首先我们自己创建了一个方便查看效果的文件 newf
基本筛选功能:
- 打印一到 3 行
- 查看文件带有 b 的行到带有 a 的行
- 打印奇数行
- 打印带有字母 a 或带有字母 b 的行
- 把所有 b,c 都换成 a
如果不带 g 每行只会替换第一个(默认)匹配到的字符
g 可以换成数字,表示替换匹配到的第几个字符
可以将字符替换为 空 表示删除 - 在第 3 行前一行插入字符
- 在第 3 行后插入字符
- 将每行第二个字符删除
如图所示,所有的空格被删掉。- r 选项支持扩展正则表达式(相当于 sed‘s/^(.)(.)/1/’)另一种方式 sed‘/.//2’newfsed” - 把所有 abc 替换为 ABC
- y 选项是把前面匹配的项全部对应替换为后面的字符
进阶用法:
- 将 1 行放到 3 行后面
h:将模式空间的内容覆盖保持空间中
G:将保持空间内容追加到模式空间中 - 在每行后面添加 1 个空行
保持空间默认有一个空白行 - 把 1 到 4 行放在 5 行后面
1h:覆盖掉保持空间中的空白行
1,4d:删除最前面的 4 行 - 将第 1 行替换到第 3 行
总结: 通过一些简单的例子,可以看出 sed 命令简单,但是功能复杂多样,需要通过大量的练习才能熟练掌握。sed 命令在运用中十分重要,它可以批量搜索,显示,修改文本内容,这是必须要学会,并熟练使用的工具。
正文完
星哥玩云-微信公众号