您的位置:首页 > 其它

sed

2015-12-13 22:03 267 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: