昨天在看sed 簡明教程。本身實驗兩個地址都是正則時,遇到了一些問題,谷歌也找不到詳細解釋。通過屢次實驗,終於弄清楚了。下面說下我本身的理解。html
sed 的地址能夠是行號,也能夠是正則表達式。當兩個地址都是正則時,經過下面的循環肯定地址範圍:正則表達式
假設表達式爲:/re1/,/re2/
,則肯定地址範圍的過程爲:shell
從第一行開始,尋找第一個匹配 re1
的行:bash
若未找到匹配 re1
的行,則退出循環。即再也不尋找匹配 re2
的行,地址範圍爲空。code
找到第一個匹配 re1
的行 n1
後,開始從 n1
後尋找第一個匹配 re2
的行。htm
若未找到匹配 re2
的行,則地址範圍爲 n1-$
,退出循環。教程
若找到第一個匹配 re2
的行 n2
,則獲得第一部分地址範圍 n1-n2
。而後從 n2 後(不包括 n2 行)開始下一次循環,即從 n2 行後,尋找第一個匹配 re1
的行。get
示例:class
$ cat sed_addr_re.txt 1 2 3 4 2 2 3 3 # 第一次循環, re1 未匹配 $ sed '/0/,/4/d' sed_addr_re.txt 1 2 3 4 2 2 3 3 # 第一次循環, re1 匹配,re2 未匹配。 $ sed '/2/,/5/d' sed_addr_re.txt 1 # 第一次循環,re1 匹配,re2 匹配。第二次循環 re1 未匹配。 $ sed '/1/,/4/d' sed_addr_re.txt 2 2 3 3 # 第一次循環,re1 匹配,re2 匹配。第二次循環 re1 匹配, re2 未匹配。 $ sed '/2/,/4/d' sed_addr_re.txt 1 # 第一次循環,re1 匹配,re2 匹配。第二次循環 re1 匹配, re2 匹配。 $ sed '/2/,/3/d' sed_addr_re.txt 1 4 3