sed命令

sed使用参数:sed [-nefr] [动作]
   -n :使用安静(silent)模式。只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
   -e :直接在命令列模式上进行 sed 的动作编辑;
   -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
   -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
   -i :直接修改读取的文件内容,而不是输出到终端。

动作:
   a :新增, a 的后面接字串,这些字串会在当前的下一行出现。
   i :插入, i 的后面接字串,这些字串会在当前的上一行出现。
   c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行。
   d :删除
   p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行。
   s :取代,可以直接进行取代的工作。

示例:
将aaa.txt的内容列出并且列印行号,同时,请将第1-2行删除!
   # nl aaa.txt | sed '1,2d'
sed的动作为'1,2d',即删除1-2行。注意一下,原本应该是sed -e才对,没有 -e 也行,同时也要注意aaa.txt文件没有变化!

只要删除第 2 行
   # nl aaa.txt | sed '2d'   

要删除第3到最后一行

   # nl aaa.txt | sed '3,$d'  


如果删除以Love开头的行
   # sed -i '/^Love/d' aaa.txt

删除包含Love的行
   # sed -i '/Love/d' aaa.txt


在第二行后加上“abcdef”
   # nl aaa.txt | sed '2a abcdef'  

如果是要在第二行前
   # nl aaa.txt | sed '2i abcdef'   

将第2-5行的内容取代成为"abcdef"
   # nl aaa.txt | sed '2,5c abcdef'  
 
仅列出文件内的第 5-7 行
   # nl aaa.txt | sed -n '5,7p'

搜索aaa.txt,找到flume对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把arg替换为args,再输出这行
   # nl aaa.txt | sed -n '/flume/{s/arg/args/;p}'

如果只替换第一个flume行中arg关键字,就退出
   # nl aaa.txt  | sed -n '/flume/{s/arg/args/;p;q}'    
最后的q是退出。

数据的搜寻并替换
   sed 's/要被取代的字串/新的字串/g'

直接修改文件内容
   # sed -i 's/\.$/\!/g' regular_express.txt  

在 aaa.txt  最后一行加入“test”,$ 代表的是最后一行
   # sed -i '$a test' aaa.txt  

在行首添加字符串;
sed -i 's/^/xxx/' aaa.txt  # ^符号代表行首

在行尾添加字符串;
sed 's/$/string/' aaa.txt  # $符号代表行尾

你可能感兴趣的:(sed命令)