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
ai中可以用 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 表示使用擴展正則表達式