sed 命令
2016-09-06 17:05
162 查看
sed是stream editor的简称,也就是流编辑器。它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。
sed命令的使用规则是这样的:
sed [option] 'command' input_file
其中option是可选的,常用的option有如下几种:-n 使用安静(silent)模式(想不通为什么不是-s)。在一般sed的用法中,所有来自stdin的内容一般都会被列出到屏幕上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来;
-e 直接在指令列模式上进行 sed 的动作编辑;
-f 直接将 sed 的动作写在一个文件内,
-r 让sed命令支持扩展的正则表达式(默认是基础正则表达式);
-i 直接修改读取的文件内容,而不是由屏幕输出。常用的命令有以下几种:
a \: append即追加字符串, a \的后面跟上字符串s(多行字符串可以用\n分隔),则会在当前选择的行的后面都加上字符串s;
c \: 取代/替换字符串,c \后面跟上字符串s(多行字符串可以用\n分隔),则会将当前选中的行替换成字符串s;
d: delete即删除,该命令会将当前选中的行删除;
i \: insert即插入字符串,i \后面跟上字符串s(多行字符串可以用\n分隔),则会在当前选中的行的前面都插入字符串s;
p: print即打印,该命令会打印当前选择的行到屏幕上;
s: 替换,通常s命令的用法是这样的:
$ cat test.txt
this is first line
this is second line
this is third line
this is fourth line
this fifth line
happy everyday
end
$ sed '1a \add one' test.txt
本例命令部分中的1表示第一行,同样的第二行写成2,第一行到第三行写成
比如
本例的作用是在第一行之后增加字符串”add one”,从输出可以看到具体效果。
$ sed '1,$a \add one' test.txt
本例表示在第一行和最后一行所有的行后面都加上”add one”字符串,从输出可以看到效果。
$ sed '/first/a \add one' test.txt
本例表示在包含”first”字符串的行的后面加上字符串”add one”,从输出可以看到第一行包含first,
所以第一行之后增加了”add one”
$ sed '/^ha.*day$/a \add one' test.txt
本例使用正则表达式匹配行,
则可以匹配到文件的”happy everyday”这样,所以在该行后面增加了”add one”字符串。
$ sed '$c \add one' test.txt
本例表示将最后一行替换成字符串”add one”,从输出可以看到效果。
$ sed '4,$c \add one' test.txt
本例将第四行到最后一行的内容替换成字符串”add one”。
$ sed '/^ha.*day$/c \replace line' test.txt
本例将以ha开头,以day结尾的行替换成”replace line”。
$ sed '/^ha.*day$/d' test.txt
本例删除以ha开头,以day结尾的行。
$ sed '4,$d' test.txt
本例删除第四行到最后一行中的内容。
$ sed -n '4,$p' test.txt
本例在屏幕上打印第四行到最后一行的内容,p命令一般和-n选项一起使用。
$ sed -n '/^ha.*day$/p' test.txt
本例打印以ha开始,以day结尾的行。
$ sed 's/line/text/g' test.txt
本例将文件中的所有line替换成text,最后的g是global的意思,也就是全局替换,如果不加g,
则只会替换本行的第一个line。
$ sed '/^ha.*day$/s/happy/very happy/g' test.txt
本例首先匹配以ha开始,以day结尾的行,本例中匹配到的行是”happy everyday”这样,
然后再将该行中的happy替换成very happy。
$ sed 's/\(.*\)line$/\1/g' test.txt
$ sed 's/\(.*\)is\(.*\)line/\1\2/g' test.txt
sed命令的使用规则是这样的:
sed [option] 'command' input_file
其中option是可选的,常用的option有如下几种:-n 使用安静(silent)模式(想不通为什么不是-s)。在一般sed的用法中,所有来自stdin的内容一般都会被列出到屏幕上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来;
-e 直接在指令列模式上进行 sed 的动作编辑;
-f 直接将 sed 的动作写在一个文件内,
-f filename则可以执行filename内的sed命令;
-r 让sed命令支持扩展的正则表达式(默认是基础正则表达式);
-i 直接修改读取的文件内容,而不是由屏幕输出。常用的命令有以下几种:
a \: append即追加字符串, a \的后面跟上字符串s(多行字符串可以用\n分隔),则会在当前选择的行的后面都加上字符串s;
c \: 取代/替换字符串,c \后面跟上字符串s(多行字符串可以用\n分隔),则会将当前选中的行替换成字符串s;
d: delete即删除,该命令会将当前选中的行删除;
i \: insert即插入字符串,i \后面跟上字符串s(多行字符串可以用\n分隔),则会在当前选中的行的前面都插入字符串s;
p: print即打印,该命令会打印当前选择的行到屏幕上;
s: 替换,通常s命令的用法是这样的:
1,2s/old/new/g,将old字符串替换成new字符串
$ cat test.txt
this is first line
this is second line
this is third line
this is fourth line
this fifth line
happy everyday
end
$ sed '1a \add one' test.txt
本例命令部分中的1表示第一行,同样的第二行写成2,第一行到第三行写成
1,3,用
$表示最后一行,
比如
2,$表示第二行到最后一行中间所有的行(包含第二行和最后一行)。
本例的作用是在第一行之后增加字符串”add one”,从输出可以看到具体效果。
$ sed '1,$a \add one' test.txt
本例表示在第一行和最后一行所有的行后面都加上”add one”字符串,从输出可以看到效果。
$ sed '/first/a \add one' test.txt
本例表示在包含”first”字符串的行的后面加上字符串”add one”,从输出可以看到第一行包含first,
所以第一行之后增加了”add one”
$ sed '/^ha.*day$/a \add one' test.txt
本例使用正则表达式匹配行,
^ha.*day$表示以ha开头,以day结尾的行,
则可以匹配到文件的”happy everyday”这样,所以在该行后面增加了”add one”字符串。
$ sed '$c \add one' test.txt
本例表示将最后一行替换成字符串”add one”,从输出可以看到效果。
$ sed '4,$c \add one' test.txt
本例将第四行到最后一行的内容替换成字符串”add one”。
$ sed '/^ha.*day$/c \replace line' test.txt
本例将以ha开头,以day结尾的行替换成”replace line”。
$ sed '/^ha.*day$/d' test.txt
本例删除以ha开头,以day结尾的行。
$ sed '4,$d' test.txt
本例删除第四行到最后一行中的内容。
$ sed -n '4,$p' test.txt
本例在屏幕上打印第四行到最后一行的内容,p命令一般和-n选项一起使用。
$ sed -n '/^ha.*day$/p' test.txt
本例打印以ha开始,以day结尾的行。
$ sed 's/line/text/g' test.txt
本例将文件中的所有line替换成text,最后的g是global的意思,也就是全局替换,如果不加g,
则只会替换本行的第一个line。
$ sed '/^ha.*day$/s/happy/very happy/g' test.txt
本例首先匹配以ha开始,以day结尾的行,本例中匹配到的行是”happy everyday”这样,
然后再将该行中的happy替换成very happy。
$ sed 's/\(.*\)line$/\1/g' test.txt
$ sed 's/\(.*\)is\(.*\)line/\1\2/g' test.txt