sed

sed命令详解

linuxdic

cdf ds

 

 

#!/bin/bash
#2018-06-30 06:59:38
# sed Stream Editor文本流编辑
#sed命令的语法格式:
#sed的命令格式: sed [option] 'sed command' filename
#sed的脚本格式:sed [option] -f 'sed script' filename

#sed命令的选项(option):
#-n :只打印模式匹配的行.
#-e :直接在命令行模式上进行sed动作编辑,此为默认选项
#-f :将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作
#-r :支持扩展表达式((默认是基础正规表示法语法))  想少用\  那你就用-r
#-i :直接修改文件内容,而不是输出到终端。

#sed command: [n1[,n2]]function
#n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 1020 行之间进行的,则『 10,20[动作行为] 』
#function:
#a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~(可以理解为append)
#i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
#c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
#d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
#p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~,即只打印匹配的行.
#s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

#  sed 后面接的动作,请务必以 '' 两个单引号括住喔!
echo "删除第二行到第4行."
nl ips.txt | sed '2,4d' | head -n 5

echo "删除第二行到最后一行"
nl ips.txt | sed '2,$d' | head -n 5

echo "删除第4行.如果4行是空的,会往后找到非空行,补充到第4行."
nl ips.txt | sed '4d' | head -n 5

echo "在第二行后(亦即是加在第三行)加上『drink tea?』字样!"
nl ips.txt | sed '2a drink tea' | head -n 5

echo "要在第二行前"
nl ips.txt | sed '2i drink tea' | head -n 5
 
 echo "如果是要增加两行以上,在第二行后面加入两行字,例如『Drink tea or .....』与『drink beer?』"
 echo "每一行之间都必须要以反斜杠『 \ 』来进行新行的添加喔"
 nl ips.txt | sed '2a Drink tea or .....\
drink beer?' | head -n 5


 

应用举例: 

sed -in 's/^#//g' tmp.txt 取消全部的#注释。

sed -in '4s/^#//g' tmp.txt 取消第4行的#注释。

sed -in 's/^/#/g' tmp.txt 全部添加#注释。

# echo "aaa bbb "|sed -r 's/(.)/A/'

Aaa bbb

# echo "aaa bbb "|sed  's/\(.\)/A/'

Aaa bbb

sed -r 's/([^:]+):(.*):([^:]+)/\3:\2:\1/' 1.txt 以:为分割符,将第一段和最后一段互相替换,\1表示第一个()内容,\2表示第二个()内容,\3表示第三个内容。

posted @ 2018-06-30 07:49  PKICA  阅读(159)  评论(0编辑  收藏  举报