shell三剑客之sed

一、介绍

sed 是一种在线的、非交互式的编辑器,在处理文本时是逐行读取文件内容,读到匹配的行就根据指令做操作,不匹配就跳过。

二、格式

sed  [options] pattern  filename

三、参数和动作

参数说明:
-e       多点编辑
-f       从指定文件中读取编辑
-i.bak   备份,并对内容进行修改
-n       取消自动打印
-r       支持使用扩展正则表达式
-V       显示版本信息
-h       显示帮助

动作说明:
    动作前面通常加一些匹配项
a   新增, a 后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c   取代, c 后面可以接字串,这些字串可以取代 n1,n2 之间的行
d   删除, d 通常后面不接任何咚咚
i   插入, i 后面可以接字串,而这些字串会在新的一行出现(目前的上一行)
p   打印, p 通常会与参数 sed -n 一起运行
s   取代, s 通常可以搭配正规表示法,例如 1,20s/old/new/g
=   显示匹配的行号
!  取反

四、范例

1.打印显示文本内容

sed -n '3p' test.sh             # 打印文件的第3行
sed -n '$p' test.sh             # 打印文件的最后一行
sed -n '3,6p' test.sh           # 打印文件的第3行到第6行
sed -n '3,$p' test.sh           # 打印文件的第3行到最后一行的内容
sed -n '3~2p' test.sh           # 从第3行开始,每隔两行打印一行,波浪号后面的2表示步长
sed -n '/love/p' test.sh        # 打印匹配love的行
sed -n '/love/,3p' test.sh      # 打印从匹配love的行到第3行的内容,及后面所有匹配love的行
sed -n '/love/,$p' test.sh      # 打印从匹配love的行到最后一行的内容
sed -n '/love/,+1p' test.sh     # 打印匹配love的行及其向后一行,如果有多行匹配love,则匹配的每一行都会向后多打印一行
sed -n '/love/,/you/p' test.sh  # 打印从匹配内容love到匹配内容you的行
sed -n '3,/love/p' test.sh      # 打印第三行到匹配love的行
sed -n "$=" test.sh             # 打印test.sh文件最后一行的行号
sed -n '/error/=' test.sh       # 打印匹配error的行的行号
sed -n '/error/{=;p}' test.sh   # 打印匹配error的行的行号和内容(可用于查看日志中有error的行及其内容)

2.增加文件内容,向文件中添加或插入行

sed '3apython' test.sh       # 在第三行后面添加python,3表示行号
sed '3ipython' test.sh       # 在第三行之前插入python,3表示行号
sed '$apython' test.sh       # 在最后一行之后添加python
sed '$ipython' test.sh       # 在最后一行之前插入python
sed '/123/apython' test.sh   # 在包含123的行后面添加python,如果文件中有多行包括123,则每一行后面都会添加
sed '/123/ipython' test.sh   # 在包含123的行之前插入python,如果文件中有多行包含123,则每一行之前都会插入

3.删除文件中指定的行

sed '3d' 1.txt            # 删除第三行
sed '$d' 1.txt            # 删除最后一行
sed '1~2d' 1.txt          # 从第一行开始删除,每隔2行就删掉一行,即删除奇数行
sed '1,3d' 1.txt          # 删除1~3行
sed '1,3!d' 1.txt         # 删除1~3之外的所有行
sed '/123/d' 1.txt        # 删除匹配123的行
sed '/123/,$d' 1.txt      # 删除从匹配123的行到最后一行
sed '/123/,+1d' 1.txt     # 删除匹配123的行及其后面一行
sed '/^$/d'  1.txt        # 删除空行
sed '/123\|abc/!d' 1.txt  # 删除不匹配123或abc的行,/123\|abc/ 表示匹配123或abc ,!表示取反

4.更改文件中指定的行

sed '1chello' test.sh         # 将文件的第一行替换为hello  
sed '$chello' test.sh         # 将文件的最后一行替换为hello
sed '/123/chello' test.sh     # 将包含123的行替换为hello

五、sed高级用法

猜你喜欢

转载自blog.csdn.net/l_liangkk/article/details/105571597