1.参数说明:
<tr>
<td style="text-align: center;background-color: bisque">-n</td>
<td > 仅显示script处理后的结果</td>
</tr>
<tr>
<td style="text-align: center;background-color: bisque">-V或--version</td>
<td>显示版本信息<br>centOS:sed --version<br>macOS不支持</td>
</tr>
<tr>
<td style="text-align: center;background-color: cadetblue">a</td>
<td >新增,后面跟字符串,插入在指定行的下一行<br><font color="green">sed '4a newLine' text.txt</font></td>
</tr>
<tr>
<td style="text-align: center;background-color: cadetblue">c</td>
<td>取代,后面跟字符串,可以取代n1,n2之间的行<br><font color="green">sed '2,5c NO 2-5 line' text.txt</font></td>
</tr>
<tr>
<td style="text-align: center;background-color: cadetblue">d</td>
<td >删除<br><font color="green">sed '1'd text.txt #删除第一行</font></td>
</tr>
<tr>
<td style="text-align: center;background-color: cadetblue">i</td>
<td> 插入,后面跟字符串,插入在指定行的上一行<br><font color="green">sed '2i hello' text.txt</font></td>
</tr>
<tr>
<td style="text-align: center;background-color: cadetblue">p</td>
<td width="400"> 打印<br><font color="green">sed -n '2,4'p text.txt</font></td>
</tr>
<tr>
<td style="text-align: center;background-color: cadetblue">s </td>
<td width="400">替换<br><font color="green">sed -ig 's/456/hello/g' text2.txt</font></td>
</tr>
-e | 以指定的script来处理输入的文本文件,用于实现多个行为 |
-f | 以指定的script文件来处理输入的文本文件 |
-h或--help | 显示帮助 centOS:sed --help macOS不支持 |
2.2 打印多行
# sed -n 'n1,n2'p filename n1,n2为数字时,n1<n2
sed -n '2,4'p text.txt
sed -n '1,$'p text.txt
2.3 打印包含某个字符串的行
注意:包含字符串,必须用//将字符串包含,否则提示无效命令
# 打印包含root字符串的行
sed -n '/root/'p text.txt
# 使用正则表达式 特殊字符^ $ . *也能在sed中使用
sed -n '/^1/'p text.txt #打印以1开头的行
sed -n '/in$/'p text.txt #打印以in结尾的行
sed -n '/r..o/'p text.txt #打印r、o之间包含2个字符的行
sed -n '/ooo*/'p text.txt #打印至少包含2个o的行
2.4 打印指定字符串所在行之间的内容
sed -n '/operator/,/bash/p' text.txt
2.5 打印替换后的内容
sed -n 's/operator/echo/p' text.txt
2.6 -e 实现多个行为
sed -e '1'p -e '/111/'p -n text.txt #打印第一行和包含111的行
2.7 d 删除某行或多行
不仅可以删除指定的单行以及多行,还可以删除匹配某个字符的行,另外还可以删除从某个行直到文档结束
sed '1'd text.txt #删除第一行
sed '1,3'd text.txt #删除第一行到第三行
sed '2,$'d text.txt #删除第二行到最后
sed '/oot/' text.txt #删除包含oot的行
2.8 替换字符串或字符
- s:替换
- g:全局替换,不加只替换每行的第一个
- 分隔符:/,还可以使用其他的特殊字符如# @
sed '2,4s/ot/to/g' text.txt # 将第2行到第4行的ot替换为to
sed 's#ot#to#g' text.txt #
sed 's/[0-9]//g' text.txt #删除所有的数字
sed 's/[a-zA-Z]//g' text.txt #删除所有的字母
sed 's/[0-9a-zA-Z]//g' text.txt #删除所有的数字和字母
2.9 调换2个字符的位置
sed 's/(rot)(.*)(bash)/321/' text.txt #将bash和rot调换
2.10 增加字符串
sed 's/^.*$/123&/' text.txt #在每一行的前面加上123
sed 's/^.*$/&123/' text.txt #在每一行的后面加上123
2.11 直接修改文件的内容
由于这个命令可以直接把文件修改,修改前最好先备份,避免出错。
sed -i 's/:/#/g' text.txt #linux
#mac强制要求备份,否则报错,以下为Mac
sed -i 'bak' 's/:/#/g' text.txt #备份
sed -ig 's/456/hello/g' text2.txt # -ig
sed -i '' 's/hello/456/g' text2.txt #指定备份为空
mac下直接替换一直报错,解决方法参考:
http://blog.sina.com.cn/s/blog_5fde60890101ic7r.html
https://www.cnblogs.com/meitian/p/5907562.html
使用 i 插入行
#在第2行前插入1行
sed '2i hello' text.txt
#将2-5行的内容替换为NO 2-5 line
sed '2,5c NO 2-5 line' text.txt
数据的搜寻并执行命令
sed -n '/roo*/{s/bash/blueshell/;p;q}' text.txt
2.12 保存到一个文件
sed 's/456/hello/g' text2.txt > text3.txt
2.13 打印指定字符串所在行之间的内容
sed -n '/operator/,/bash/p' text.txt
2.13 添加行
#第4行后添加一行
sed -e 4a
ewLine text.txt
sed '4a newLine' text.txt
#最后一行添加
sed '$a this is test' text.tx
#添加2行,注意命令行中换行
sed -e '2a hello
> world ' text.txt