sed 的 ^ 和 $ 正则表达式锚点与多行模式空间的 POSIX 行为

sed 的 ^ 和 $ 正则表达式锚点与多行模式空间的 POSIX 行为

sed ^如果模式空间包含嵌入的换行符$,例如在使用命令?

它们是否仍应匹配模式空间的开头和结尾,或者是否应匹配包含多行的任何行的开头和结尾?

GNUsed^$仍然只匹配整个模式空间的开头和结尾。

答案1

^$布雷始终在开头和结尾匹配线,如所描述的这里

任何sed使用布雷也会这样做。在使用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

相关内容