sed:Stream EDitor 行编辑器,默认不编辑源文件,仅对模式空间中的数据做处理

格式: sed [options] ‘AddressCommand’ FILE1 [FILE2 …] -n: 静默模式,不再默认显示模式空间中的字符到屏幕上 -i: 直接编辑源文件,默认不编辑源文件,很危险 -e SCRIPT -e SCRIPT:可以同时执行多个脚本 -f /PATH/TO/SED_SCRIPT:指定脚本处理文件 (e,g) sed -f ~/sed_script file -r: 表示使用拓展的正则表达式 查找空格删除: history | sed ‘s#^[[:space:]]*##g’ history | sed ‘s#^[[:space:]]{1,}##g’ history | sed -r ‘s#^[[:space:]]+##g’

Address Format: 1,StartLine,EndLine: 比如1,100 2,/RedExp/: /^root/ 3,/pattern1/,/pattern2/: 第一次被模式匹配到的行至第一次被模式二匹配到的行结束之间的行 4,LineNumber: 精确到某行 :最后一行:最后一行:最后一行 -1:最后一行的前一行 5,StartLine,+N 从起始行开始,向后N行

Commond: d: 删除符合条件的行,不显示 (e,g) sed ‘1,d′/etc/fstabp:显示符合条件的行,会打印两遍(e,g)sed‘1,d′/etc/fstabp:显示符合条件的行,会打印两遍(e,g)sed‘1,d’ /etc/fstab p: 显示符合条件的行,会打印两遍 (e,g) sed ‘1,p’ /etc/fstab a \string: 在指定的行后面追加新行,内容为string (e,g) sed ‘1,2a \hello world’ /etc/fstab i \string :在指定的行前面添加新行,内容为string (e,g) sed ‘1,2i \hello world’ /etc/fstab r FILE: 将指定的文件的内容添加至符合条件的处 (e,g) sed ‘1,2r /etc/issue’ /etc/fstab w FILE: 将指定范围内的内容另存为指定的文件中 (e,g) sed ‘1,5w ./new’ /etc/fstab s/pattern/string/: 查找并替换 (e,g) sed ‘s/oot/OOT/’ /etc/fstab 默认替换第一次出现的 修饰符: g:全局替换 sed ‘s/oot/OOT/g’ /etc/fstab i:忽略大小写 sed ‘s/oot/OOT/i’ /etc/fstab s///等价s###等价s@@@ 引用: sed ‘s#1..e#&r#g’ new.txt 将love改成lover 后向引用: sed ‘s#1(..e)#l\1#g’ new.txt 将love改成Love

sed练习: 1、删除/etc/grub.conf文件中行首的空白符; sed -r ‘s@^[[:spapce:]]+@@g’ /etc/grub.conf 2、替换/etc/inittab文件中”id:3:initdefault:”一行中的数字为5; sed ‘s@(id:)0-9@\15\2@g’ /etc/inittab 3、删除/etc/inittab文件中的空白行; sed ‘/^$/d’ /etc/inittab 4、删除/etc/inittab文件中开头的#号; sed ‘s@^#@@g’ /etc/inittab 5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符; sed -r ‘s@^#[[:space:]]+@@g’ /etc/inittab 6、删除某文件中以空白字符后面跟#类的行中的开头的空白字符及# sed -r ‘s@^[[:space:]]+#@@g’ /etc/inittab 7、取出一个文件路径的目录名称 echo “/etc/rc.d/” | sed -r ‘s@^(/.*/)[^/]+/?@\1@g’ 或者 name=basename “/etc/rc.d/” echo “/etc/rc.d/” | sed “s@[/]$name[/]@/@g” 8、取出一个文件路径的目录基名 echo “/etc/rc.d/” | sed -r ‘s@^/.*/([^/]+)/?@\1@g’ 或者 basename “/etc/rc.d/”


备份地址: 【sed行编辑器