Sed [选项] '[动作]' 文件名
选项:
-n 一般sed命令会把所有的数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处里的行输出到屏幕
-e 允许对输入数据应用多条sed命令编辑
-i 用sed的修改结果直接修改读取数据的文件,而不是由屏幕输出
动作:
a\: 追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。
c\: 行替换,用c后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需要用“\”代表数据未完结。
i\: 插入,在当前行前插入一行或多行。插入多行时, 除最后一行外,每行末尾需要用“\”代表数据未完结。
d: 删除,删除指定的行
p: 打印,输出指定的行
s: 字符串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字符串/新字符串/g”(和vim中替换格式类似)
行数据操作
[siming@yesiming testDir]$ cat test
Id Name Java C++ Linux Average
1 Jim 80 81 82 81
2 Kate 90 91 92 91
3 HanMei 70 71 72 71
[siming@yesiming testDir]$ sed '2p' test #打印了第二行后,又把原文件输出了一次
Id Name Java C++ Linux Average
1 Jim 80 81 82 81
1 Jim 80 81 82 81
2 Kate 90 91 92 91
3 HanMei 70 71 72 71
[siming@yesiming testDir]$ sed -n '2p' test # 加上-n 选项,就只输出经过sed处理的行
1 Jim 80 81 82 81
删除行
[siming@yesiming testDir]$ sed '2,3d' test #删除2到3行,然后输出,但是并不改变原文件
Id Name Java C++ Linux Average
3 HanMei 70 71 72 71
[siming@yesiming testDir]$ cat test #原文件没有变
Id Name Java C++ Linux Average
1 Jim 80 81 82 81
2 Kate 90 91 92 91
3 HanMei 70 71 72 71
追加行
[siming@yesiming testDir]$ sed '2i你好呀' test #在第二行后面插入新行
Id Name Java C++ Linux Average
你好呀
1 Jim 80 81 82 81
2 Kate 90 91 92 91
3 HanMei 70 71 72 71
[siming@yesiming testDir]$ sed '2i hello \ #”\”表示回车后,下一行接着输入
> world!' test
Id Name Java C++ Linux Average
hello
world!
1 Jim 80 81 82 81
2 Kate 90 91 92 91
3 HanMei 70 71 72 71
替换行
[siming@yesiming testDir]$ sed '3cData Error' test #把第三行替换了
Id Name Java C++ Linux Average
1 Jim 80 81 82 81
Data Error
3 HanMei 70 71 72 71
字符串替换
[siming@yesiming testDir]$ sed '4s/70/81/g' test #把第四行的70替换成81
Id Name Java C++ Linux Average
1 Jim 80 81 82 81
2 Kate 90 91 92 91
3 HanMei 81 71 72 71
修改原文件
[siming@yesiming testDir]$ sed -i '4s/70/81/g' test #把第四行的70改成81,并且更新原文件内容,没有输出
[siming@yesiming testDir]$
多条件同时执行
[siming@yesiming testDir]$ sed -e 's/Jim/Hello/g;s/Kate/World/g' test
Id Name Java C++ Linux Average
1 Hello 80 81 82 81
2 World 90 91 92 91
3 HanMei 81 71 72 71
#因为没有家行号,所以把整篇文档中的Jim换成Hello,Kate换成World