sed 兩個地址都是正則表達式時地址範圍的肯定

昨天在看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
相關文章
相關標籤/搜索