sed 是流编辑器,在处理大文件的时候在速度,执行效率上面较一般的交互式文本处理编辑器有明显的优势。 但须注意的是sed只对原文件的拷贝进行操作(使用-i 参数也可以将更改保存到原文件中,但是修改后无法恢复,所以一定要慎用该参数),且只记录在内存里面。如果相对所做的结果进行保存须重定向到一个新文本里面去。
sed的基本命令格式:
sed [-n] [-e] ‘command’ file_name #-e用在使用多个command的时侯,一般可省略
sed [-n] -f script.sh file_name #调用脚本
sed的参数:
-n 不打印 【sed -n '/oracle/p' /etc/passwd #只打印含有oracle的行(缺省为打印所有行)】
-f 指定脚本文件 【sed -n -f myscript.sh /etc/passwd #调用我的脚本对/etc/passwd进行处理】
-e 多命令执行 【sed -n '/oracle/p' -e /oracle/=' /etc/passwd #多命令时,必须添加-e】
常用command:
p 打印匹配行 【sed -n ‘/oracle/p’ /etc/passwd】
= 显示文件行号 【sed -e ‘/oracle/=' /etc/passwd
a\ 在定位行号后附加新文本信息 【sed -e '/oracle/p' -e '/oracle/a\hello world!' /etc/passwd】
i\ 在定位行号后插入新文本信息 【sed -e '/oracle/p' -e '/oracle/i\hello world!' /etc/passwd】
d 删除定位行 【sed -e '/oracle/d' /etc/passwd】
c\ 用新文本替换定位行文本 【sed -n -e '/oracle/c\hello world!' /etc/passwd】
s 使用替换模式替换相应模式 【sed -e '/oracle/s/oracle/& user/g' /etc/passwd】
r 从另一个文件中读文本并追加 【sed -n -e '/home/p/ -e '/home/ r test' /etc/passwd】
w 写文本到一个文件 【sed -e '37,39w /etc/passwd.bak' /etc/passwd】
q 第一个模式匹配完成后退出或立即退出 【sed '/.oo.*/q' /etc/passwd】
l 显示与八进制A S C I I代码等价的控制字符 【sed '1,$l' /etc/passwd】
{ } 在定位行执行的命令组 【sed '1{H;d};$G' /etc/passwd |sed '/^$/d'】
n 从另一个文件中读文本下一行,并附加在下一行 【】
g 将模式2粘贴到/pattern n/ 【sed '1{h;d};$G' /etc/passwd |sed '/^$/d'】
y 传送字符 【sed 'y/oracle/ora11g' /etc/passwd】
n 延续到下一输入行;允许跨行的模式匹配语句 【sed 'n;s/oracle11g/ora11g/' /etc/passwd】
挪动数据 【sed '1{H;d};$G' /etc/passwd |sed '/^$/d'】
合并数据 【awk 'NR==36,NR==39{print}' /etc/passwd |sed 'N;s/\n/\t/'】
==============================================================================================
PS.1. s替换语句 s/被替换部分/替换部分/g:有没有g的区别,有g是对全局进行操作,没有g只是对所有行的第一个匹配部分进行替换
ps.2 s替换语句的p参数要和 sed -n 选项组合用才有意义,且可以和数字连用,表示只打印第几个匹配的语句。 比如 "s/oralce11g/ora11g/2p /etc/passwd"
阅读(774) | 评论(0) | 转发(1) |