1. sed匹配格式
行编辑命令
默认不编辑源文件, 仅对模式空间中的数据(可以理解为一个行缓冲区)做处理, 处理后将模式空间数据显示到终端
1.1. 始末行匹配: start,end
比如 1,100 指的是从行 [1, 100]$ 表示最后一行
^ 表示首行
1.2. 正则模式匹配: /regexp/
/^root/ 以root字符串开头的行
1.3. 始末行模式匹配: /ptn1/,/ptn2/
第一次被 /ptn1/匹配到的行开始, 到第一次被 /ptn2/ 匹配到的行结束
1.4. 精准定位行号: lineNo
匹配行号
1.5. 起始行+长度匹配: start, +n
从start指定的行开始, 到 start+n行结束
2. sed命令
原始文件: vim使用整理.md
[niewj@niewj sf_down]$ cat -n vim使用整理.md
1 # vim使用整理
2 ---
3
4 [TOC]
5 ---
6 # vim使用整理.md
7
8 ## 删除操作
9
10 `dw` 从光标处删除至词尾
11 `d$` 从光标处删除至行尾
12 `dd ` 删除整行
13
14 ## 显示光标位置及文件状态: `CTRL-g`
15 ## 跳转到文件中的某一指定行: `n+SHIFT-G`
16 n:数字,代表行号, 省略的话, 默认跳转到最后一行
17 ## 查找字符串: `/`
18 n查找下一个 /Shift-N反向查 /逆向查?代替/
19
20 ## 查找替换`:s/old/new/g` 替换old为new
21 ## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
22 (#,#代表的是两行的行号)
23 :%s/old/new/g 替换全文
24 :%s/old/new/gc全文替换时确认每次替换--添加 c
25
26 `:!` 执行外部命令
27 `:w` FILENAME改动保存到文件
28 `:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
29 `:r FILENAME` 插入外文件内容-->从光标处置入
30 ## 插入模式
[niewj@niewj sf_down]$
2.0 sed命令一览(''中的部分)
1. 删除行: d
2. 显示行: p
3. 前追加行: a
"string": 行后加行, 内容string
4. 前追加行: i
"string": 行前加行, 内容string
a
i
中可以用 n 增加换行
5. 后追加文件读: r
fname: 行后加入文件fname
中的全部内容
就是把fname中的内容全部读取出来, 加入到匹配行; 比如 :
sed '2r a.txt' cuur.txt
就是把 a.txt 文件内容全读出来, 最为一个整体, 显示到屏幕的时候, 追加到第2行的下面(从第3行开始显示a.txt的内容, 原来的第三行, 跟到文件a.txt输入完成后!)
特殊用法->合并文件: 把一个文件追加到另一个的末尾
6. 抽取另存: w
fname
将匹配的所有行内容另存到一个文件 fname 中
下面对此文件做操作
7. 查找替换: s///
(s三斜线): s/ptn/str/[g|i]
ptn 是模式, 可以用普通字符串, 也可以用正则
str是替换成的字符串;
- 修饰符: g=全局替换; 因为默认是指替换 每行第一个匹配到的, 如果一行中有多个匹配到,全部要替换, 就加g global
- 修饰符: i=忽略大小写 ignore sensitive
s/// s### s@@@ 都可以, 不是必须用
/
的; 如果使用了# , 匹配/就不需要转义了;
8. s///中使用:模式引用&
(&就指代pattern匹配的字符串)
s/pattern/string/[g|i] > 模式就是pattern在每行能匹配到的部分, 比如:
s@follow@with@g 这里的 follow 就是模式, 匹配到某行中
follow me follow usfellow me fellow us
就会替换为:
with me with usfellow me fellow us
使用模式引用, 在每个匹配到的后面都加
er
可以更灵活:s@f....w@&er@g 这样替换就变成了:
follower me follower usfellower me fellower us
9. s///中使用: 后向引用 \1
比如我们匹配到的pattern用()括起来分组, 在后面替换的部分用 \1
来编号引用它, 比如我们要匹配:
validation volatile vocation 等把这些单词用<font color=red></font>
给包围起来:sed 's/(v.ti.[s|t])/<font color='red'> 1 </font>/g'
2.1. 删除匹配的行: d
2.1.1. 删除 start,stop
-> 第1行到第19行: sed '1,19d'
[niewj@niewj sf_down]$ sed '1,19d' vim使用整理.md
## 查找替换`:s/old/new/g` 替换old为new
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
## 插入模式
[niewj@niewj sf_down]$
2.1.2. 删除start,$
->22行到末行: sed '22,$d'
[niewj@niewj sf_down]$ sed '22,$d' vim使用整理.md
# vim使用整理
---
[TOC]
---
# vim使用整理.md
## 删除操作
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
## 显示光标位置及文件状态: `CTRL-g`
## 跳转到文件中的某一指定行: `n+SHIFT-G`
n:数字,代表行号, 省略的话, 默认跳转到最后一行
## 查找字符串: `/`
n查找下一个 /Shift-N反向查 /逆向查?代替/
## 查找替换`:s/old/new/g` 替换old为new
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
[niewj@niewj sf_down]$
2.1.3. 删除start,+len
->前13行另一种方法: sed '1,+12d'
[niewj@niewj sf_down]$ sed '1,+12d' vim使用整理.md
## 显示光标位置及文件状态: `CTRL-g`
## 跳转到文件中的某一指定行: `n+SHIFT-G`
n:数字,代表行号, 省略的话, 默认跳转到最后一行
## 查找字符串: `/`
n查找下一个 /Shift-N反向查 /逆向查?代替/
## 查找替换`:s/old/new/g` 替换old为new
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
## 插入模式
[niewj@niewj sf_down]$
2.1.4. 删除指定行->只删除第4行: sed '4d'
[niewj@niewj sf_down]$ sed '4d' vim使用整理.md
# vim使用整理
---
---
# vim使用整理.md
## 删除操作
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
## 显示光标位置及文件状态: `CTRL-g`
## 跳转到文件中的某一指定行: `n+SHIFT-G`
n:数字,代表行号, 省略的话, 默认跳转到最后一行
## 查找字符串: `/`
n查找下一个 /Shift-N反向查 /逆向查?代替/
## 查找替换`:s/old/new/g` 替换old为new
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
## 插入模式
[niewj@niewj sf_down]$
[TOC]所在行被删除
2.1.5. 删除包含#
的行: sed '/#/d' vim使用整理.md
/开始 /结束 中间是匹配模式
[niewj@niewj sf_down]$ sed '/#/d' vim使用整理.md
---
[TOC]
---
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
n:数字,代表行号, 省略的话, 默认跳转到最后一行
n查找下一个 /Shift-N反向查 /逆向查?代替/
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:r FILENAME` 插入外文件内容-->从光标处置入
[niewj@niewj sf_down]$
2.1.6. 删除包含特殊字符的行->删除包含 /
的行: sed '/\//d'
[niewj@niewj sf_down]$ sed '/\//d' vim使用整理.md
# vim使用整理
---
[TOC]
---
# vim使用整理.md
## 删除操作
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
## 显示光标位置及文件状态: `CTRL-g`
## 跳转到文件中的某一指定行: `n+SHIFT-G`
n:数字,代表行号, 省略的话, 默认跳转到最后一行
(#,#代表的是两行的行号)
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
## 插入模式
[niewj@niewj sf_down]$
2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
[niewj@niewj sf_down]$ sed '/^#/,25d' vim使用整理.md
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
[niewj@niewj sf_down]$
2.2. 显示匹配的行: p
明确一个概念: sed命令默认显示 模式空间 中的内容; 而 p 是过滤匹配的行显示;这样一来, sed + p 就会使得 匹配的内容 显示两次;
我们可以使用 sed的
-n
静默模式, 使得不显示模式空间中的内容, 只输出p
匹配的内容
2.2.1. 不使用静默模式 -n
-> 显示包含#
的行: sed '/#/p'
[niewj@niewj sf_down]$ sed '/#/p' vim使用整理.md
# vim使用整理
# vim使用整理
---
[TOC]
---
# vim使用整理.md
# vim使用整理.md
## 删除操作
## 删除操作
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
## 显示光标位置及文件状态: `CTRL-g`
## 显示光标位置及文件状态: `CTRL-g`
## 跳转到文件中的某一指定行: `n+SHIFT-G`
## 跳转到文件中的某一指定行: `n+SHIFT-G`
n:数字,代表行号, 省略的话, 默认跳转到最后一行
## 查找字符串: `/`
## 查找字符串: `/`
n查找下一个 /Shift-N反向查 /逆向查?代替/
## 查找替换`:s/old/new/g` 替换old为new
## 查找替换`:s/old/new/g` 替换old为new
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
## 插入模式
## 插入模式
[niewj@niewj sf_down]$
2.2.2. 使用静默模式 -n
-> 显示包含#
的行: sed -n '/#/p'
[niewj@niewj sf_down]$ sed -n '/#/p' vim使用整理.md
# vim使用整理
# vim使用整理.md
## 删除操作
## 显示光标位置及文件状态: `CTRL-g`
## 跳转到文件中的某一指定行: `n+SHIFT-G`
## 查找字符串: `/`
## 查找替换`:s/old/new/g` 替换old为new
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
## 插入模式
[niewj@niewj sf_down]$
2.2.3. 静默模式 -n
-> 显示#
开头的行: sed -n /^#/p
[niewj@niewj sf_down]$ sed -n '/^#/p' vim使用整理.md
# vim使用整理
# vim使用整理.md
## 删除操作
## 显示光标位置及文件状态: `CTRL-g`
## 跳转到文件中的某一指定行: `n+SHIFT-G`
## 查找字符串: `/`
## 查找替换`:s/old/new/g` 替换old为new
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
## 插入模式
[niewj@niewj sf_down]$
2.3. 匹配的行后追加字符串: a
2.3.1 后追加行: #开头的行后加1行"---": sed '/^#/a \---'
[niewj@niewj sf_down]$ sed '/^#/a \---' vim使用整理.md
# vim使用整理
---
---
[TOC]
---
# vim使用整理.md
---
## 删除操作
---
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
## 显示光标位置及文件状态: `CTRL-g`
---
## 跳转到文件中的某一指定行: `n+SHIFT-G`
---
n:数字,代表行号, 省略的话, 默认跳转到最后一行
## 查找字符串: `/`
---
n查找下一个 /Shift-N反向查 /逆向查?代替/
## 查找替换`:s/old/new/g` 替换old为new
---
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
---
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
## 插入模式
---
[niewj@niewj sf_down]$
2.3.2 后追加行: ##开头的行后加2行"---": sed '/^##/a \---\n---'
[niewj@niewj sf_down]$ sed '/^##/a \---\n---' vim使用整理.md
# vim使用整理
---
[TOC]
---
# vim使用整理.md
## 删除操作
---
---
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
## 显示光标位置及文件状态: `CTRL-g`
---
---
## 跳转到文件中的某一指定行: `n+SHIFT-G`
---
---
n:数字,代表行号, 省略的话, 默认跳转到最后一行
## 查找字符串: `/`
---
---
n查找下一个 /Shift-N反向查 /逆向查?代替/
## 查找替换`:s/old/new/g` 替换old为new
---
---
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
---
---
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
## 插入模式
---
---
[niewj@niewj sf_down]$
n 可以转义
2.4. 匹配的行后追加字符串: i
2.4.1 前追加行: #开头的行前加1行"---": sed '/^#/i \---'
[niewj@niewj sf_down]$ sed '/^#/i \---' vim使用整理.md
---
# vim使用整理
---
[TOC]
---
---
# vim使用整理.md
---
## 删除操作
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
---
## 显示光标位置及文件状态: `CTRL-g`
---
## 跳转到文件中的某一指定行: `n+SHIFT-G`
n:数字,代表行号, 省略的话, 默认跳转到最后一行
---
## 查找字符串: `/`
n查找下一个 /Shift-N反向查 /逆向查?代替/
---
## 查找替换`:s/old/new/g` 替换old为new
---
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
---
## 插入模式
[niewj@niewj sf_down]$
2.5. 匹配的行后追加文件内容: r
2.5.1 后追加文件: #开头的行后追加文件内容
预备: 我们新建一个moon.txt文件, 把徐志摩的两个月亮
的一部分填进去, 后边用于显示追加;
echo -e "我望见有两个月亮:\n一般的样,不同的相。\n一个这时正在天上\n披敝著雀的衣裳;\n她不吝惜她的恩情,\n满地全是她的金银。\n她不忘故.的琉璃,\n三海间有她的清丽。\n她跳出云头,跳上树,\n又躲进新绿的藤萝。">moon.txt
需求: 在每个 "##" 开头的行后面贴上 moon.txt的全文:
[niewj@niewj sf_down]$ sed '/^##/r moon.txt' vim使用整理.md
# vim使用整理
---
[TOC]
---
# vim使用整理.md
## 删除操作
我望见有两个月亮:
一般的样,不同的相。
一个这时正在天上
披敝著雀的衣裳;
她不吝惜她的恩情,
满地全是她的金银。
她不忘故宫的琉璃,
三海间有她的清丽。
她跳出云头,跳上树,
又躲进新绿的藤萝。
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
## 显示光标位置及文件状态: `CTRL-g`
我望见有两个月亮:
一般的样,不同的相。
一个这时正在天上
披敝著雀的衣裳;
她不吝惜她的恩情,
满地全是她的金银。
她不忘故宫的琉璃,
三海间有她的清丽。
她跳出云头,跳上树,
又躲进新绿的藤萝。
## 跳转到文件中的某一指定行: `n+SHIFT-G`
我望见有两个月亮:
一般的样,不同的相。
一个这时正在天上
披敝著雀的衣裳;
她不吝惜她的恩情,
满地全是她的金银。
她不忘故宫的琉璃,
三海间有她的清丽。
她跳出云头,跳上树,
又躲进新绿的藤萝。
n:数字,代表行号, 省略的话, 默认跳转到最后一行
## 查找字符串: `/`
我望见有两个月亮:
一般的样,不同的相。
一个这时正在天上
披敝著雀的衣裳;
她不吝惜她的恩情,
满地全是她的金银。
她不忘故宫的琉璃,
三海间有她的清丽。
她跳出云头,跳上树,
又躲进新绿的藤萝。
n查找下一个 /Shift-N反向查 /逆向查?代替/
## 查找替换`:s/old/new/g` 替换old为new
我望见有两个月亮:
一般的样,不同的相。
一个这时正在天上
披敝著雀的衣裳;
她不吝惜她的恩情,
满地全是她的金银。
她不忘故宫的琉璃,
三海间有她的清丽。
她跳出云头,跳上树,
又躲进新绿的藤萝。
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
我望见有两个月亮:
一般的样,不同的相。
一个这时正在天上
披敝著雀的衣裳;
她不吝惜她的恩情,
满地全是她的金银。
她不忘故宫的琉璃,
三海间有她的清丽。
她跳出云头,跳上树,
又躲进新绿的藤萝。
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
## 插入模式
我望见有两个月亮:
一般的样,不同的相。
一个这时正在天上
披敝著雀的衣裳;
她不吝惜她的恩情,
满地全是她的金银。
她不忘故宫的琉璃,
三海间有她的清丽。
她跳出云头,跳上树,
又躲进新绿的藤萝。
[niewj@niewj sf_down]$
2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
[niewj@niewj sf_down]$ sed '$r moon.txt' vim使用整理.md
# vim使用整理
---
[TOC]
---
# vim使用整理.md
## 删除操作
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
## 显示光标位置及文件状态: `CTRL-g`
## 跳转到文件中的某一指定行: `n+SHIFT-G`
n:数字,代表行号, 省略的话, 默认跳转到最后一行
## 查找字符串: `/`
n查找下一个 /Shift-N反向查 /逆向查?代替/
## 查找替换`:s/old/new/g` 替换old为new
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
## 插入模式
我望见有两个月亮:
一般的样,不同的相。
一个这时正在天上
披敝著雀的衣裳;
她不吝惜她的恩情,
满地全是她的金银。
她不忘故宫的琉璃,
三海间有她的清丽。
她跳出云头,跳上树,
又躲进新绿的藤萝。
[niewj@niewj sf_down]$
2.6 抽取另存->匹配的行内容另存到文件
sed -n '/^##/w comment.txt'
[niewj@niewj sf_down]$ sed -n '/^##/w comment.txt' vim使用整理.md
[niewj@niewj sf_down]$ cat comment.txt
## 删除操作
## 显示光标位置及文件状态: `CTRL-g`
## 跳转到文件中的某一指定行: `n+SHIFT-G`
## 查找字符串: `/`
## 查找替换`:s/old/new/g` 替换old为new
## 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
## 插入模式
[niewj@niewj sf_down]$
2.7 查找并替换 s///
2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
[niewj@niewj sf_down]$ sed 's/^##/\/\//' vim使用整理.md
# vim使用整理
---
[TOC]
---
# vim使用整理.md
// 删除操作
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
// 显示光标位置及文件状态: `CTRL-g`
// 跳转到文件中的某一指定行: `n+SHIFT-G`
n:数字,代表行号, 省略的话, 默认跳转到最后一行
// 查找字符串: `/`
n查找下一个 /Shift-N反向查 /逆向查?代替/
// 查找替换`:s/old/new/g` 替换old为new
// 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
// 插入模式
[niewj@niewj sf_down]$
2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
sed 's/^##////' vim使用整理.md 使用的是 /
, 其实也可以用其他的, 比如这里使用 @
比较好:
sed 's@^##@//@' vim使用整理.md 不用转义 / , 多方便
[niewj@niewj sf_down]$ sed 's@^##@//@' vim使用整理.md
# vim使用整理
---
[TOC]
---
# vim使用整理.md
// 删除操作
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
// 显示光标位置及文件状态: `CTRL-g`
// 跳转到文件中的某一指定行: `n+SHIFT-G`
n:数字,代表行号, 省略的话, 默认跳转到最后一行
// 查找字符串: `/`
n查找下一个 /Shift-N反向查 /逆向查?代替/
// 查找替换`:s/old/new/g` 替换old为new
// 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
// 插入模式
[niewj@niewj sf_down]$
2.7.3. 全局替换g
2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
[niewj@niewj sf_down]$ sed 's/`/~/' vim使用整理.md
# vim使用整理
---
[TOC]
---
# vim使用整理.md
## 删除操作
~dw` 从光标处删除至词尾
~d$` 从光标处删除至行尾
~dd ` 删除整行
## 显示光标位置及文件状态: ~CTRL-g`
## 跳转到文件中的某一指定行: ~n+SHIFT-G`
n:数字,代表行号, 省略的话, 默认跳转到最后一行
## 查找字符串: ~/`
n查找下一个 /Shift-N反向查 /逆向查?代替/
## 查找替换~:s/old/new/g` 替换old为new
## 替换两行间出现的每个匹配串~:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
~:!` 执行外部命令
~:w` FILENAME改动保存到文件
~:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
~:r FILENAME` 插入外文件内容-->从光标处置入
## 插入模式
[niewj@niewj sf_down]$
2.7.3.2 使用全局替换: g
[niewj@niewj sf_down]$ sed 's/`/~/g' vim使用整理.md
# vim使用整理
---
[TOC]
---
# vim使用整理.md
## 删除操作
~dw~ 从光标处删除至词尾
~d$~ 从光标处删除至行尾
~dd ~ 删除整行
## 显示光标位置及文件状态: ~CTRL-g~
## 跳转到文件中的某一指定行: ~n+SHIFT-G~
n:数字,代表行号, 省略的话, 默认跳转到最后一行
## 查找字符串: ~/~
n查找下一个 /Shift-N反向查 /逆向查?代替/
## 查找替换~:s/old/new/g~ 替换old为new
## 替换两行间出现的每个匹配串~:#,#s/old/new/g~ 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
~:!~ 执行外部命令
~:w~ FILENAME改动保存到文件
~:#,# w FILENAME~ ** 保存部分内容;#,#行号(顶行,底行)
~:r FILENAME~ 插入外文件内容-->从光标处置入
## 插入模式
[niewj@niewj sf_down]$
2.8 s///使用模式引用&
: 引用匹配部分原值
[niewj@niewj sf_down]$ sed 's/^##/&@@ /g' vim使用整理.md
# vim使用整理
---
[TOC]
---
# vim使用整理.md
##@@ 删除操作
`dw` 从光标处删除至词尾
`d$` 从光标处删除至行尾
`dd ` 删除整行
##@@ 显示光标位置及文件状态: `CTRL-g`
##@@ 跳转到文件中的某一指定行: `n+SHIFT-G`
n:数字,代表行号, 省略的话, 默认跳转到最后一行
##@@ 查找字符串: `/`
n查找下一个 /Shift-N反向查 /逆向查?代替/
##@@ 查找替换`:s/old/new/g` 替换old为new
##@@ 替换两行间出现的每个匹配串`:#,#s/old/new/g` 替换两行间出现的每个匹配串(#,#代表的是两行的行号)。
(#,#代表的是两行的行号)
:%s/old/new/g 替换全文
:%s/old/new/gc全文替换时确认每次替换--添加 c
`:!` 执行外部命令
`:w` FILENAME改动保存到文件
`:#,# w FILENAME` ** 保存部分内容;#,#行号(顶行,底行)
`:r FILENAME` 插入外文件内容-->从光标处置入
##@@ 插入模式
[niewj@niewj sf_down]$
2.9 s///后向引用: 引用匹配分组原值 \1
有文本文件 test:
[niewj@niewj sf_down]$ cat -n test
1 vacation 假期
2 vocation 职业
3 validation n. 确认;批准;生效
4 volatile 易变的
5 apt 恰当的
6 opt 选择
7 assess 评估
8 access 接近
9 explore 探索
10 exploit 利用
11 follow me follow us
12 fellow me fellow us
[niewj@niewj sf_down]$
2.9.1 匹配 v开头且包含ti的单词, 用 <font></font>包裹起来:
前四行都有 v*ti* 我们的需求就是: 匹配 v开头且包含ti的单词, 用 <font></font>包裹起来:
[niewj@niewj ]$ sed 's/\(v.*ti.*[\s|\t]\)/\<font color='red'\> \1 \<\/font\>/g' test
<font color=red> vacation </font>假期
<font color=red> vocation </font>职业
<font color=red> validation </font>n. 确认;批准;生效
<font color=red> volatile </font>易变的
apt 恰当的
opt 选择
assess 评估
access 接近
explore 探索
exploit 利用
follow me follow us
fellow me fellow us
[niewj@niewj sf_down]$
sed 's/(v.ti.[s|t])/<font color='red'> 1 </font>/g' s///的三部分分析:
- s/pattern/
(v.*ti.*[s|t]) (1). 匹配v开头中间包含ti 后面是 空格或tab键的模式;
- s/pattern/\<font color='red'\> 1 \</font\>/
\1 就是引用上面的模式, 用括号括起来的 () 在实际文本行中匹配到什么, 替换的字符串, 照旧贴上!!
- /g 全局替换(默认是指匹配每行第一次匹配, 不过此处无所谓, 因为每行只有一次匹配)
2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
其实后项引用真正强大的就是部分引用, 上面的例子不能说明;
[niewj@niewj sf_down]$ sed 's/v\(.*ti.*[\s|\t]\)/V\1/g' test
Vacation 假期
Vocation 职业
Validation n. 确认;批准;生效
Volatile 易变的
apt 恰当的
opt 选择
assess 评估
access 接近
explore 探索
exploit 利用
follow me follow us
fellow me fellow us
[niewj@niewj sf_down]$
()作为一个分组, 后面可以用1 保留, 只替换v->V即可
v\(.*ti.*[\s|\t]\) 分成两部分了:
v -> 后面替换V的
()->\1 来引用保留的
3. sed命令option
-n 静默模式, 模式空间中的内容不会显示出来;
-i 直接修改源文件(默认是不修改源文件的)
-e 同时执行多个小脚本: 每次是执行一条脚本, -e这样可以执行多条: -e script_1 -e script_2
-f 多个脚本可以放到一个文件中, 每行方一条; sed -f script_file target_file
-r 表示使用扩展正则表达式
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。