第四、sed命令
sed命令简述
sed是一种在线编辑器,他一次处理一行内容。
处理时,首先会将当前的行存储在临时缓冲区中,此临时缓冲区称为“模式空间”
然后,sed命令会对缓冲区中的内容进行处理。处理完成后,会将缓冲区的内容送达到屏幕。
接着会去处理下一行,直到处理文件的末尾。
文件的内容并没有改变。
sed主要用来自动编辑一个或者多个文件;简化对文件的反复操作,编写转化程序等。
sed 命令定址
sed命令可以通过定制来编辑所编辑的行,该地址用数字构成;
用逗号分隔的两行数表示以这两行为起止的行的范围(包括行数表的两行)
eg: 1,3 表示待编辑的行为1,2,3行
美元符号($)表示最后一行
sed 基本命令
d表示删除
sed '2'd sedtest 删除sedtest的第二行内容
sed '1,3d' sedtest
sed '4,$d' sedtest
sed 模式匹配
sed '/hah/'d sedtest --删除包含hah 的行
s标志替换
sed 's/hhhhhh/**/' sedtest ---将包含hhhhhh 的行中的hhhhhh替换为**
s/ 替换
sed 's/hhhhhh/**/g' sedtest --- 如果没有/g,则只替换每行的第一个,而有/g(global)后,这一行所有匹配到的都会去替换
sed 's/^first/start/' sedtest -- 替换以first开头的行替换为start开始
sed -n 's/^first/start/p' sedtest ---(-n)选项一般和p标志一起使用,表示只打印那些发生替换的行
&标志表示追加
sed 's/^first/&start/' sedtest
sed - n 's/\(lalala\)l/\1@@@\p' sedtest
--表示打印将lalala后的l替换为@@@的行 ;*: ()需要转义, \( , /1表示第一个小括号内的内容
sed -n 's/\(lal\)a\(la\)l/\1*a*\2*l*/p' sedtest
-- * \1表示第一个小括号的内容 \2表示第二个小括号的内容
sed 's#777#***#' sedtest
-- s后面的符号就是分隔符
sed -n '/777/,/999/p' sedtest
--- 打印匹配到777 到999之间的行,包含777和999
sed -n '5,/^ninth/p' sedtest
-----打印从第五行开始到第一个包含以ninth开始的行之间的所有行。
sed -n '/first/,/sixth/s/$/end/p' sedtest
--匹配first到sixth的行,并且将每行的末尾打印为end
多点编辑:e命令,流式处理
sed -e '1,5'd -e 's/777/***/' sedtest
expression 表达式赋值
sed --expression='s/ha/$$/' --expression='/hhh/d' sedtest
r:命令,为读入命令
sed '/first/r a.txt' sedtest
--在sedtest文件中匹配到的行的后面追加 a.txt文件的内容,如果匹配多行,则显示在所有行的后面
w命令: 写入文件
sed -n '/first/w a.txt' sedtest
--- 将sedtest中匹配到first的行写入到a.txt文件中去
a命令:追加命名
sed '/^fir/a\--->this is a example' sedtest
--- a为在后面追加
sed '/first/i\---.insert in here' sedtest
---> i为在前面插入
sed '3q' sedtest-----打印完第3行后,退出sed。
y命令 : 替换
sed '1,10y/h/H/' sedtest
Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。