sed
是一个非交互式文本编辑器,可对文本文件和标准输入进行编辑;只对缓冲区总共原始文件的副本进行编辑,并不编辑原始的文件.
如果需要保存更改的内容需要重定向到另一个文件sed ‘sed命令‘ fff > ggg
使用以下场合
大文件
编辑命令复杂,在交互式编辑器中难以输入
对文件扫描一遍,但需要执行多个编辑参数
处理流程
读入新的一行内容到缓存空间
从操作指令中去匹配第一条指令,判断是否匹配模式.
如果不匹配,则忽略后续的编辑命令,回到第2步继续去匹配下一条指令;
如果匹配则针对缓存的行执行编辑命令,完成后回到第2步继续去匹配下一条指令;
所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;
所有行处理完之后结束.
定义sed的三种方式:
sed 选项 ‘命令‘ 文件名
sed 选项 -f 脚本 文件名
./sed脚本文件 文件名
sed选项
-n 不打印所有行到标准输出
-e 可使用多个sed编辑命令
-f 调用sed脚本文件
-r 启用扩展正则表达式
-i 直接编辑
sed编辑命令
{} 在定位行执行命令组
p 打印匹配行
q 匹配一次即退出
= 打印行号
d 删除匹配行
n 处理下一行
s 替换字符串
y 变换字符
r 从另一个文件中读文本
w 保存到另一个文件中
i\ 定位行之前插入
a\ 定位行之后插入
c\ 修改匹配行
h 将模式缓冲区复制到保持缓冲区
H 保持缓冲区追加到模式缓冲区
x 互换模式和保持缓冲区
g 保持缓冲区复制到模式缓冲区
G 将模式缓冲区追加到保持缓冲区
文本定位
$ 最后一行
x x行
x,y x到y行
x,y! 不包含x到y行的行
/123/ 包含123的行
/123/,x 从与123匹配行到x行x,/123
从x行到与123匹配的行
下面给出一些命令示例:
r 从另一个文件中读取文本
sed ‘/root/r 文件名‘
w 将文写入到一个文件
sed ‘/root/w 文件名‘
s 替换字符串
sed ‘s/root/1234/g‘
y 变换字符
sed ‘y/abcd/ABCD/g‘
c\修改文本
sed ‘/root/c\ffffffff‘
n 处理匹配行的下一行
sed ‘/root/{n;s/bin/ooo/g;}‘ 文件名
行首加#
sed -i‘s/^/#/g‘ qqq
sed ‘/^$/d;G‘ 先用sed ‘/^$/d‘ 查找并删除空行;然后用 sed G插入空行
sed ‘G;G‘ 使一个文件中每一行都占用三行空间(就是在每一行后边插两行空行)
sed ‘/regex/G‘ 查找后在后边加入一空行
sed -n ‘$=‘ 统计行数
sed -n ‘2,+3p‘ 输出第二行及其后3行
sed -n ‘n;p‘ 输出偶数行
sed -n ‘p;n‘ 输出奇数行
删除每行开头的所有空格
sed ‘s/^\s*//g‘
删除文件每行的第二个字符
sed -r ‘s/(.)(.)(.*)/\1\3/‘ a
sed ‘s/.//2‘ a
删除文件每行的最后一个字符
sed -r ‘s/(.*)(.)/\1/‘ a
sed ‘s/.$//g‘ a
删除文件每行的倒数第二个单词。
sed -nr ‘s/(.*)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4\5\6/p‘
删除文件每行的最后一个单词。
sed -nr ‘s/(.*)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4/p‘
大小写转换
sed中,使用\u表示大写,\l表示小写
1. 把每个单词的第一个小写字母变大写:
sed ‘s/\b[a-z]/\u&/g‘ a \b是单词边界,也可以用\<替换\b
2. 把所有小写变大写:
sed ‘s/[a-z]/\u&/g‘ filename
3. 大写变小写:
sed ‘s/[A-Z]/\l&/g‘ filename
本文出自 “破浪Linux” 博客,请务必保留此出处http://plang.blog.51cto.com/9002142/1722599
原文地址:http://plang.blog.51cto.com/9002142/1722599