Linux文本处理工具之sed

概念: sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓存区中,称为”模式空间(pattern space)”,接着用舍得命令处理缓冲区中的内容,处理完成后,把缓存区的内容输出。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你是用重定向存储输出。sed主要用来编辑一个或多个文件。 格式: sed [-nefri] ‘command’ 输入文本 常用选项: -n:使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的资料一般都会被列出到终端上。但如果加上-n参数之后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。 -e:直接在指令列模式上进行sed的动作编辑 -f:直接将sed的动作写在一个档案内,-f filename则可以执行filename内的sed动作 -r:sed的动作支援的是延伸正规表示的语法(预设是几次正规表示法的语法) -i:直接修改读取的档案内容,而不是由荧幕输出 动作说明: [n1[,n2]] 常用命令:不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

常用命令: a:追加,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行) c:更改,c的后面可以接字符串,这些字符串可以取代n1,n2之间的行 d:删除,d的后面不接受任何东西 i:插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行) p:列印,讲某个选择的资料印出,通常会与参数-n一起出现 s:替换,可以直接进行替换的工作,sed ‘s/要替换的字符串/新的字符串/flags’,这里修饰替换的标志flags有: g:表示在行内进行全局替换,而没有g时通常只有第一次出现的时候被替换 n:1-512之间的一个数字,表示对本模式中指定模式第n次出现的情况进行替换

p:打印模式空间的内容

w:将模式空间的内容写入file中

q:结束或退出sed

举例: 1.删除某行 a.sed ‘2d’ file #删除第二行 b.sed ‘$d’ file #删除最后一行 c.sed ‘1,5d’ file #删除第一行到第五行 d.sed ‘5,$d’ file #删除第五行到最后一行 e.sed ‘/My/,/You/d’ file #删除包含”My”的行到包含”You”的行之间的行 f.sed ‘/My/,10d’ file #删除包含”My”的行到第十行的内容 g.sed ‘/^$/d’ file #删除空行 2.显示某行 a.sed -n ‘2p’ file #显示第二行 b.sed -n ‘$p’ file #显示最后一行 c.sed -n ‘1,5p’ file #显示第一行到第五行 d.sed -n ‘5,$p’ file #显示第五行到最后一行 3.模式进行查询 a.sed -n ‘/sed/p’ file #查询包括关键字sed所在的所有行 b.sed -n ‘/\$/p’ file #查询包括关键字$所在所有行,使用”\”屏蔽特殊含义 4.增加一行或多行字符串 a.sed ‘1a test’ file #在第一行后新增字符串”test” b.sed ‘1,3a test’ file #在第一行到第三行后新增字符串”test” c.sed ‘1a test\ntest’ file #在第一行后新增多行,使用换行符\n 5.替代一行或者多行或者一行中的某部分 a.sed ‘1c test’ file #第一行的内容替换为test b.sed ‘1,2c test’ file #第一行到第二行的内容替换为test c.sed ‘1,5s/a/A/’ file #第一到第五中的首个a替换为A d.sed ‘/B/s/a/A/g’ file #将有B的行中的a替换为A 6.插入 a.sed -i ‘$a test’ file #在最后一行直接输入test 7.多点编辑 a.sed -e ‘3,$d’ -e ‘s/Test/test’ file #先删除第三行到最后一行的数据,然后将”Test”替换为”test”,$需要和正则表达式的$区分开,在此处表示行的结束 b.sed -e ‘3,$d; s/Test/test’ file #效果同上 8.脚本 a.讲以下命令保存在一个文本中(sed-script) 3i\ ~~~~~~~~~~~~~~~~~~~~~ 3,$s/\(hrwang\) is \(mjfan\)/\2 is \1/ $a\ We will love eachother forever!! b. sed -f sed-script file 上边的脚本还可以进一步的优化 a.将以下命令保持在一个sh脚本中(sed-script) #!/bin/sed -f 3i\ ~~~~~~~~~~~~~~~~~~~~~ 3,$s/\(hrwang\) is \(mjfan\)/\2 is \1/ $a\ We will love eachother forever

b../sed-script file

9.退出

a. sed ‘/^name/q’ file #在匹配到之后,,sed会输出这一行,然后再退出

b. sed ‘2q’ file #输出第二行之后就退出

c. sed ‘/name/{ s/name/NAME/ ;q; }’ file #在某行包含了name,把name替换成NAME,然后退出sed

天下没有不散的宴席,也许这人间真的只有朦朦胧胧才是真。

Linux文本处理工具之sed

相关文章:

你感兴趣的文章:

标签云: