Text-Processing
具有多行模式空間的 sed 的 ^ 和 $ 正則表達式錨的 POSIX 行為
如果模式空間包含嵌入的換行符,例如在您使用N命令之後,在正則表達式的開頭和結尾使用
sed
^
和錨點的 POSIX 行為是什麼?$
它們應該仍然匹配模式空間的開頭和結尾,還是應該匹配包含多行的任何行的開頭和結尾?
GNU仍然只匹配整個模式空間的開頭和
sed
結尾^
。$
任何
sed
使用BRE的人都會這樣做。在使用N
命令的情況下,sed
將多行視為模式空間中的一條長線,每條實線由嵌入的換行符\n
(文字\
和n
)分隔。確認:
printf '1\n2\n' | sed '1N;/2$/d'
什麼都不輸出。和:
printf '1\n2\n' | sed '1N;/1$/d'
給你:
1 2
或者使用
l
ook 命令更詳細:$ printf '1\n2\n' | sed 1N\;l 1\n2$ 1 2 $ printf '1\n2\n' | sed 1N\;l | od -t a 0000000 1 \ n 2 $ nl 1 nl 2 nl 0000012