sed简单用法

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. 示例 测试文本text.txt: ```#txt rot:x:0:0:/rot:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin operator:x:11:0:operator:/rooot:/sbin/nologin roooot:x:0:0:/rooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ``` ## 2.1 打印某行 ```#shell # sed -n 'n'p filename 其中n为数字 sed -n '2'p text.txt #只打印第2行 sed '2'p text.txt #打印全部内容,其中第2行打印2遍 ``` ![](https://img2018.cnblogs.com/blog/1418970/201912/1418970-20191204224524576-1129555268.png)

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


原文地址:https://www.cnblogs.com/csj2018/p/11985596.html