Linux
了解 GNU sed 範圍地址的工作原理
我正在閱讀GNU sed 中的範圍地址。但我不明白它到底是如何工作的,我試圖執行
sed --debug
但輸出太冗長而無法理解。假設我有以下文件
input.txt
:===sep1 Aghroum ===sep2 Thirjeen ===sep3 Ya wedi mata ikinikh ===sep4 Ifoullissen ===sep5
當我嘗試如下使用範圍地址時:
sed -n '/=/,/=/{/=\|^$/! p}' input.txt
輸出是:
# it prints non-empty lines from ===sep1 to ==sep2, and from ===sep3 to ==sep4, etc. Aghroum Ya wedi mata ikinikh
據我所知,GNU sed 逐行處理輸入文件,為什麼它也不匹配to之間的範圍地址?(請注意,我不是在問如何獲取這些行,我知道如何使用類似的東西來做到這一點。但我問的是為什麼它不從to開始第二個範圍地址)
==sep2``==sep3``sed -n '/===/!p'``===sep2``===sep3
謝謝
具有兩個地址的編輯命令應選擇從與第一個地址匹配的第一個模式空間到與第二個地址匹配的下一個模式空間的包含範圍。
$$ … $$從所選範圍之後的第一行開始,sed將再次查找第一個地址。此後,應重複該過程。
一旦找到一個範圍,下一個範圍最早只能從該範圍之後的行開始。
換句話說,範圍內的結束匹配“消耗”了它匹配的行;該行無法啟動同一範圍的另一個實例。