^
在POSIX正则表达式(Bash使用POSIX ERE)中匹配整个输入字符串的开头,$
匹配整个输入字符串的结尾。您链接的文档提到行,因为大多数文本处理工具(如sed
、grep
或awk
)默认按行读取输入,并且在大多数情况下,字符串与行重合。
9.3.8 BRE Expression Anchoring
BRE可以被限制为仅匹配行的开头或结尾;这称为“定位”。在以下情况下,插入符号和美元符号特殊字符应视为BRE锚点:
当插入符号(
'^'
)作为整个BRE的第一个字符使用时,它将是一个锚点。当插入符号作为子表达式的第一个字符使用时,实现可以将其视为锚点。插入符号将表达式(或可选子表达式)锚定到字符串的开头;仅从字符串的第一个字符开始的序列将被BRE匹配。例如,BRE“^ab”在字符串“abcdef”中匹配“ab”,但在字符串“cdefab”中无法匹配。BRE“(^ab)”可以匹配前者的字符串。便携式BRE应转义子表达式中的前导插入符号以匹配文本中的实际插入符号。当美元符号(
'$'
)作为整个BRE的最后一个字符使用时,它将是一个锚点。当美元符号作为子表达式的最后一个字符使用时,实现可以将其视为锚点。美元符号将表达式(或可选子表达式)锚定到正在匹配的字符串的结尾;美元符号可以说匹配最后一个字符后面的字符串的结尾。通过
'^'
和'$'
两者都锚定的BRE仅匹配整个字符串。例如,BRE"^abcdef$"
仅匹配由“abcdef”组成的字符串。
grep
、sed
或awk
这样的工具按行读取。 - Wiktor Stribiżew