Regex 正则表达式锚点$dons';我不能在控制台工作

Regex 正则表达式锚点$dons';我不能在控制台工作,regex,bash,macos,terminal,Regex,Bash,Macos,Terminal,作为教程的一部分,我正在尝试正则表达式中的锚标记字符串结束$和字符串开始^。不管怎样,只有字符串开始标记起作用。显然,在本教程中,这两个标记都起作用 锚令牌$(不工作) 输入文件regex16.txt 命令 grep '.*bar$' regex16.txt grep '^foo.*' regex15.txt 预期结果 baz foo bar foo baz bar 结果 foo bar baz foo baz bar 命令od-bc regex16.txt 0000000 14

作为教程的一部分,我正在尝试正则表达式中的锚标记字符串结束$字符串开始^。不管怎样,只有字符串开始标记起作用。显然,在本教程中,这两个标记都起作用

锚令牌$(不工作) 输入文件regex16.txt

命令

grep '.*bar$' regex16.txt
grep '^foo.*' regex15.txt
预期结果

baz foo bar
foo baz bar
结果


foo bar baz
foo baz bar
命令
od-bc regex16.txt

0000000   146 157 157 040 142 141 162 040 142 141 172 015 012 142 141 162
           f   o   o       b   a   r       b   a   z  \r  \n   b   a   r
0000020   040 146 157 157 040 142 141 172 015 012 142 141 172 040 146 157
               f   o   o       b   a   z  \r  \n   b   a   z       f   o
0000040   157 040 142 141 162 015 012 142 141 162 040 142 141 172 040 146
           o       b   a   r  \r  \n   b   a   r       b   a   z       f
0000060   157 157 015 012 146 157 157 040 142 141 172 040 142 141 162 015
           o   o  \r  \n   f   o   o       b   a   z       b   a   r  \r
0000100   012 142 141 172 040 142 141 162 040 146 157 157 015 012        
          \n   b   a   z       b   a   r       f   o   o  \r  \n        
0000116
其他文件 现在,手动操作后,另一个文件regex19.txt如下所示

0000000   154 151 157 156 012 164 151 147 145 162 012 154 145 157 160 141
           l   i   o   n  \n   t   i   g   e   r  \n   l   e   o   p   a
0000020   162 144 012 146 157 170 012 153 141 156 147 141 162 157 157 012
           r   d  \n   f   o   x  \n   k   a   n   g   a   r   o   o  \n
0000040   142 141 164 012 155 157 165 163 145 012 143 165 143 153 157 157
           b   a   t  \n   m   o   u   s   e  \n   c   u   c   k   o   o
0000060   012 144 145 145 162 012                                        
          \n   d   e   e   r  \n       
但是这个命令仍然不起作用,即使示例regex16.txt在操作后也可以工作

grep'^[a-z]{4,6}$'regex19.txt

0000000   146 157 157 040 142 141 162 040 142 141 172 015 012 142 141 162
           f   o   o       b   a   r       b   a   z  \r  \n   b   a   r
0000020   040 146 157 157 040 142 141 172 015 012 142 141 172 040 146 157
               f   o   o       b   a   z  \r  \n   b   a   z       f   o
0000040   157 040 142 141 162 015 012 142 141 162 040 142 141 172 040 146
           o       b   a   r  \r  \n   b   a   r       b   a   z       f
0000060   157 157 015 012 146 157 157 040 142 141 172 040 142 141 162 015
           o   o  \r  \n   f   o   o       b   a   z       b   a   r  \r
0000100   012 142 141 172 040 142 141 162 040 146 157 157 015 012        
          \n   b   a   z       b   a   r       f   o   o  \r  \n        
0000116
锚定令牌^(工作) 输入文件regex15.txt

命令

grep '.*bar$' regex16.txt
grep '^foo.*' regex15.txt
预期结果

foo bar baz
foo baz bar
结果


foo bar baz
foo baz bar

字符串开始是
^
&字符串结束是
$
。在问题的第一行,你已经说明了反之亦然。您的代码在Python中运行得很好。请参阅我的答案-尽管您提供的内容也应该运行得很好。您确定您的行尾是LF吗?它们是CRLF吗?给我们看一行
od-b regex16.txt
的输出。如果有回车符,您将看到文件上的octal015.run
dos2unix
,然后运行它。正如@WiktorStribiżew猜测的那样,您有一些CRLF角色。