title: sed命令
top: 43
date: 2021-01-15
tags:
- sed
categories: - linux
sed命令
Linux sed 命令是利用脚本来处理文本文件。
sed 可依照脚本的指令来处理、编辑文本文件。
Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。
语法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
参数说明:
-e <script>或--expression=<script> 以选项中指定的script来处理输入的文本文件。
- -f<script文件>或–file=<script文件> 以选项中指定的script文件来处理输入的文本文件。
- -h或–help 显示帮助。
- -n或–quiet或–silent 仅显示script处理后的结果。
- -V或–version 显示版本信息。
动作说明:
- a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
- c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
- d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
- i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
- p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
- s :取代,可以直接进行取代的工作。
查
p:print
显示查找的结果
查找格式 | |
---|---|
2p | 指定行号进行查找 |
1,5p | 指定行号范围进行查找 |
/str/p | 类似grep的过滤,支持正则 |
/str1/,/str2/p | 范围过滤 |
1,/str/p | 混合过滤 |
# 显示文件第3行的内容
sed -n 3p tsed
# 显示文件所有内容,并重复显示第3行内容 || 无-n
sed 3p tsed
# 显示从带ssh的行开始,到带passwd的行结束的内容
sed '/ssh/,/passwd/p' tsed
####################
# !的作用,对操作取反
sed -nr '/^$|#/!p' tsed # 显示非空行
删
d:delete
删除(不显示打印,并非对文件直接操作);与p操作类似
查找格式 | |
---|---|
2d | 指定行号进行删除 |
1,5d | 指定行号范围进行删除 |
/str/d | 类似grep的过滤,支持正则 |
/str1/,/str2/d | 范围过滤 |
1,/str/d | 混合过滤 |
sed '/^$/d; /^\s*$/d' tsed
# `/^$/d` => remove empty line
# `/^\s*$/d` => delete lines which may contain white space
改
-
s:substitute
替换,替换格式:s///g \\ s###g \\ s@@@g \\ s+++g
-
g: global
全局,s默认只替换每行第一个匹配的内容,s###g则替换每行所有匹配的内容
# 将空白行替换未. // ^$ 匹配空行
sed 's/^$/./g' tsed
- 后向引用
echo "echo content: root@bgape002.top" > efile
sed -r 's/:(.*)@(.*)$/**\2: \1/g' efile
# echo content**bgape002.top: root // 将匹配到的字符串替换成fmt2的形式('s/fmt1/fmt2/g')
增
c \\ a \\ i
命令 | 含义 |
---|---|
c | 替代该行内容 |
a | 在指定的行或每一行追加内容(行后另起一行) |
i | 向指定的行或每一行插入内容(行前另起一行) |
# 3行后追加内容hahahaha
sed '3a hahahaha' tsed
# 每一行都追加hahahaha
sed 'a hahahaha' tsed
# 1-3行后追加内容hahahaha
sed '1,3a hahahaha' tsed
多点编辑
# 一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell
nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
sed的正则表达式
-
sed中使用扩张正则表达式,需要添加选项
-r
- 基本正则表达式包含:
^,$.,[],*
- 扩展正则表达式包含:
(),{},?,+,|
- 基本正则表达式包含:
-
特殊字符类
- 用于匹配特定类型的字符
[:blank:] 空格(space)与定位(tab)字符 [:cntrl:] 控制字符 [:graph:] 非空格(nonspace)字符 [:space:] 所有空白字符 [:print:] 可显示的字符 [:xdigit:] 十六进制数字 [:punct:] 所有标点符号 [:lower:] 小写字母 [:upper:] 大写字母 [:alpha:] 大小写字母 [:digit:] 数字 [:alnum:] 数字和大小写字母
参考链接
[1] Linux sed 命令
[2] Linux三剑客超全超详情教程(grep、sed、awk)
>