sed是一种几乎包括全部 UNIX平台的轻量级编辑器。sed主要是用来将数据进行选取。替换。删除。功能很强大。来看看介绍: 正则表达式
sed是逐行(行编辑器,记住,一行读取一次,对行编辑。必定要记住这个概念!)读取至内存,这个内存空间也叫模式空间,在模式空间中处理后将模式空间打印至屏幕。可是默认不对原文件处理。在模式空间中能够进行进行模式匹配和编辑操做。模式空间中的内容可再次放入保持空间,进行编辑。express
须要注意的是sed命令中有没有匹配到默认都会打印至屏幕,除非对其编辑。编辑后根据编辑命令也会打印到屏幕上,或者静禁止输出。 vim
vim只能修改文档,sed能够从管道里接受任何数据进行编辑。编辑器
sed [OPTION]... 'script' [input-file] ... [选项] '[编辑命令]' 文件名
ide
选项:
spa
-n 禁止默认显示行为,只保留编辑后的行为,在不使用d命令的状况下通常都要使用。不输出模式空间中的内容至屏幕;
code
-e script, --expression=script:容许对输出数据应用多条sed命令编辑。若是写下一行用\分割下一行也-e,若是写在一行上直接-e编辑。
regexp
-i 用sed的修改结果直接修改读取数据的文件。而不是由屏幕输出。(输出数据和文件数据都改)
orm
-r --regexp-extended 表示使用扩展正则表达式。
ip
-f PATH/TO/SED_SCRIPT_FILE 经过读取脚本,每行执行一个sed编辑命令,;
script: '/地址定界或PATTERN/编辑命令'
地址定界:
(1) 空地址:对全文进行处理;
(2) 单地址:
#:指定行;
/pattern/:被此模式所匹配到的每一行;
(3) 地址范围
#,#:
#,+#:
#,/pat1/
/pat1/,/pat2/ //从第一次被匹配到的行开始第二次匹配到的行结束。
$:最后一行;
(4) 步进:~
1~2:全部奇数行; 2~2:全部偶数行;
编辑命令:
a \string 在文本后追加string。\n 可用于换行,实现多行追加;
c \string 行替换 ,把匹配到的行替换为此处指定的string,换行每行后加“\n”;
i \string 在行前插入。一行或多行,除最后与一行,每行后加 \n;
d 删除模式空间中内容。整行删除。
p 打印,显示模式空间中的内容,输出指定行。
w /PATH/TO/SOMEFILE: 保存模式空间匹配到的行到指定文件。
r /PATH/TO/FILE 将指定的文件的内容内的添加至模式匹配的行后面,文件合并。
=:为模式匹配到的行打印行号;
!:条件取反:地址定界!编辑命令;
s /pattern/string/字符串查找替换,分隔符不用要操做的分隔符,其余符号看成分隔符也行,格式为“几行s/旧字符串/新字符串/g”
替换标记:
g:全局替换;
i: 忽略字符大小写;
w:/PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
p: 显示替换成功的行;
高级编辑命令:
h:把模式空间中的内容覆盖至保持空间中;
H:把模式空间中的内容追加至保持空间中;
g:把保持空间中的内容覆盖至模式空间中;
G:把保持空间中的内容追加至模式空间中;
x:把模式空间中的内容与保持空间中的内容互换;
n:覆盖读取匹配到的行的下一行至模式空间中;
N:追加读取匹配到的行的下一行至模式空间中;
d :删除模式空间中的行;
D:删除多行模式空间中的全部行;
举例:
sed '2a \hello' student.txt //在第二行以后追加hello sed '2i hello \ world' student.txt //在第二行以前插2行数据 hello(第一行) world(第二行) sed '4s/99/55/g’ student.txt //把4行的99换成55 sed '/oot/d' /etc/fstab //删除oot在/etc/fstab sed '/^\//p' /etc/fstab 显示/开始的行 sed '/^\//a \abc' /etc/fstab /开头的行后追加abc sed '/oot/w /tmp/oot.txt' /etc/fstab 有oot的一行保存至/tmp/oot.txt目录下,处理文件/etc/fatab sed 's#l\(..e\)#L\1#g' sed.txt 把l...e中的l换为大写。 sed -n 'n;p' /etc/fstab 显示偶数行,; sed '1!G;h;$!d' FILE 逆序显示文件内容 sed ‘!d’FILE 显示最后一行 sed ‘$!N;$!d’FILE 最后两行 sed ‘/^$/d;G’ 删除原有的全部空白行,然后为全部空白行后添加一个空白行; sed ‘n;d’FILE; 显示奇数行,按行读取的。 sed ‘G’FILE 在原有行后添加空白行; echo“/etc/fstab”|sed '@[^/]\+/\?$@@' 取出基名