linux命令之sed流编辑命令

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option

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    
  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
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|i]:

  1. 修饰符: g=全局替换; 因为默认是指替换 每行第一个匹配到的, 如果一行中有多个匹配到,全部要替换, 就加g global
  2. 修饰符: i=忽略大小写 ignore sensitive

s/// s### s@@@ 都可以, 不是必须用 /的; 如果使用了# , 匹配/就不需要转义了;

8. s///中使用:模式引用& (&就指代pattern匹配的字符串)

s/pattern/string/[g|i] > 模式就是pattern在每行能匹配到的部分, 比如:

s@follow@with@g 这里的 follow 就是模式, 匹配到某行中

follow me follow us

fellow me fellow us

就会替换为:

with me with us

fellow me fellow us

使用模式引用, 在每个匹配到的后面都加 er 可以更灵活:

s@f….w@&er@g 这样替换就变成了:

follower me follower us

fellower 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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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]$

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
所在行被删除

2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md

/开始 /结束 中间是匹配模式

[niewj@niewj sf_down]$ sed '/#/d' vim使用整理.md 
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- `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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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使用整理
---
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- --- # 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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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使用整理
---

  1. 1. sed匹配格式
    1. 1.1. 始末行匹配: start,end
    2. 1.2. 正则模式匹配: /regexp/
    3. 1.3. 始末行模式匹配: /ptn1/,/ptn2/
    4. 1.4. 精准定位行号: lineNo
    5. 1.5. 起始行+长度匹配: start, +n
  2. 2. sed命令
    1. 2.0 sed命令一览(‘’中的部分)
      1. 1. 删除行: d
      2. 2. 显示行: p
      3. 3. 前追加行: a "string”: 行后加行, 内容string
      4. 4. 前追加行: i “string”: 行前加行, 内容string
      5. 5. 后追加文件读: r fname: 行后加入文件fname中的全部内容
      6. 6. 抽取另存: w fname
      7. 7. 查找替换: s///(s三斜线): s/ptn/str/[g|i]
      8. 8. s///中使用:模式引用& (&就指代pattern匹配的字符串)
      9. 9. s///中使用: 后向引用 \1
    2. 2.1. 删除匹配的行: d
      1. 2.1.1. 删除 start,stop-> 第1行到第19行: sed '1,19d'
      2. 2.1.2. 删除start,$->22行到末行: sed '22,$d'
      3. 2.1.3. 删除start,+len->前13行另一种方法: sed '1,+12d'
      4. 2.1.4. 删除指定行->只删除第4行: sed '4d'
      5. 2.1.5. 删除包含#的行: sed '/#/d' vim使用整理.md
      6. 2.1.6. 删除包含特殊字符的行->删除包含 / 的行: sed '/\//d'
      7. 2.1.7. 始末行都使用模式->删除:第一个#开头行到25行: sed '/^#/,25d'
    3. 2.2. 显示匹配的行: p
      1. 2.2.1. 不使用静默模式 -n -> 显示包含#的行: sed '/#/p'
      2. 2.2.2. 使用静默模式 -n -> 显示包含#的行: sed -n '/#/p'
      3. 2.2.3. 静默模式 -n -> 显示#开头的行: sed -n /^#/p
    4. 2.3. 匹配的行后追加字符串: a
      1. 2.3.1 后追加行: #开头的行后加1行”—“: sed '/^#/a \---'
      2. 2.3.2 后追加行: ##开头的行后加2行”—“: sed '/^##/a \---\n---'
    5. 2.4. 匹配的行后追加字符串: i
      1. 2.4.1 前追加行: #开头的行前加1行”—“: sed '/^#/i \---'
    6. 2.5. 匹配的行后追加文件内容: r
      1. 2.5.1 后追加文件: #开头的行后追加文件内容
      2. 2.5.2 特殊用法->合并文件: 把一个文件追加到另一个的末尾
    7. 2.6 抽取另存->匹配的行内容另存到文件
    8. 2.7 查找并替换 s///
      1. 2.7.1. 替换所有行首##改成//: sed 's/^##/\///'
      2. 2.7.2. 替换所有行首##改成//: sed 's@^##@//@'
      3. 2.7.3. 全局替换g
        1. 2.7.3.1 默认: 每行只匹配第一次, 如: 查找每行的 ` 并提换为~
        2. 2.7.3.2 使用全局替换: g
    9. 2.8 s///使用模式引用&: 引用匹配部分原值
    10. 2.9 s///后向引用: 引用匹配分组原值 \1
      1. 2.9.1 匹配 v开头且包含ti的单词, 用 包裹起来:
      2. 2.9.2 匹配 v开头且包含ti的单词, 修改: 只把首字母v变大写V:
  3. 3. sed命令option
--- # 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的单词, 用 包裹起来:

前四行都有 v*ti* 我们的需求就是: 匹配 v开头且包含ti的单词, 用 包裹起来:

[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///的三部分分析:

  1. s/pattern/

    (v.*ti.*[\s|\t]) (1). 匹配v开头中间包含ti 后面是 空格或tab键的模式;

  2. s/pattern/\<font color=’red’\> \1 \</font\>/

    \1 就是引用上面的模式, 用括号括起来的 () 在实际文本行中匹配到什么, 替换的字符串, 照旧贴上!!

  3. /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 表示使用扩展正则表达式


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 hi@niewj.com

×

喜欢就点赞,疼爱就打赏