sed [-nefri] [动作]
选项与参数
-n 使用安静(silent)模式,在一般 sed 的行为中,所有来自 STDIN 的数据都会被打印到屏幕上,加上 -n 选项后,则只有经过sed处理之后的行才会被打印出来
-e <script>或–expression=<script> 以选项中指定的script来处理输入的文本文件。可以用这个选项来执行多个动作
-f <script文件>或–file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
-r 使用扩展正则表达式,默认是使用基础正则表达式
-i 直接修改读取的文件,而不是输出到屏幕 (慎用!这个会修改源文件)
动作说明 [n1,n2] function
n1,n2 表示需要进行动作的行,例如 10,20[function] 表示只在10到20行进行操作
function 说明a 在行后新增,a 的后面可以接字符串,字符串会在对应行的下一行
c 整行取代, c 后面可以接字符串,这些字符串会取代 n1 到 n2 之间的行
d 删除
i 插入,i 后面可以接字符串,这些字符串会对应行的上一行出现
p 打印,通常跟 -n 一起配合,将符合要求的数据打印出来
s 行内取代,后面可以接正则,例如 1,20s/old/new/g 将 1 到 20 行中的old替换为new,/g表示全部替换,不加的话只会替换匹配到的一个字符串
y 命令表示转换。该命令与 tr 命令相似,字符按照一对一的方式从左到右进行转换。例如 y/abc/ABC/,会把小写字母转换成大写字母, a–>A,b–>B,c–>C。例如: sed ‘1,3y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/’ ceshi.txt 将ceshi.txt文件的1到3行小写替换为大写
新增与插入
nl /etc/passwd | sed '2,10a drink tea
在第2-10行的每一行后面插入一行: drink tea
sed '3i hello
在第三行之前插入一行: hello
删除
sed '4,$d' test.txt
删除 test.txt 第4到最后一行
行内替换
sed '3,10s/hello/world/g' ceshi.txt
将 ceshi.txt 文件第3-10行中的hello替换为world
如果两个动作都是替换,那么前一个替换的结果对第二个替换是有影响的,第二个动作的源是第一个替换处理之后的结果。
-e 示例
-e 可以在同一行中执行多个指令
` sed -e ‘1,10s/a/w/’ -e ‘1d’ ceshi.txt 先将 ceshi.txt 的第1到10行的首次出现的 a 替换为w,然后删除第一行。
显示打印
显示 n-m 行之间的内容
sed -n '1,1000p' catalina.out
显示文件 catalina.out从 1 到1000 的数据
显示从 n 行到文件末尾的内容
sed -n '1000,$p' catalina.out
显示文件 catalina.out 从 1000 行到末尾的内容, $ 表示最后一行
显示两个字符之间的内容
sed -n '/2018-03-08 15:05/,/2018-03-08 15:18/p' catalina.out > 1.txt
将文件 catalina.out 中 2018-03-08 15:05 字符所在行到 2018-03-08 15:18 所在行之间的内容显示出来。
打印某个字符所在行到最后一行
sed -n '/2018-03-08 15:05/,$p' catalina.out
打印某个字符所在行之后 n 行
sed -n '/ftp/,+3p' 打印匹配行之后3行