Text-Processing

具有多行模式空間的 sed 的 ^ 和 $ 正則表達式錨的 POSIX 行為

  • August 18, 2015

如果模式空間包含嵌入的換行符,例如在您使用N命令之後,在正則表達式的開頭和結尾使用sed ^和錨點的 POSIX 行為是什麼?$

它們應該仍然匹配模式空間的開頭和結尾,還是應該匹配包含多行的任何行的開頭和結尾?

GNU仍然只匹配整個模式空間的開頭和sed結尾^$

^並且$BRE中始終匹配行首和行尾,如此所述。

任何sed使用BRE的人都會這樣做。在使用N命令的情況下,sed將多行視為模式空間中的一條長線,每條線由嵌入的換行符\n(文字\n)分隔。

確認:

printf '1\n2\n' | sed '1N;/2$/d'

什麼都不輸出。和:

printf '1\n2\n' | sed '1N;/1$/d'

給你:

1
2

或者使用look 命令更詳細:

$ 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

引用自:https://unix.stackexchange.com/questions/223910