以数字开头的捕获行的正则表达式

以数字开头的捕获行的正则表达式

在 Ubuntu 中,以文件 /etc/passwd 为例。我尝试通过正则表达式捕获第 41-46 行。我使用以下命令:

nl /etc/passwd | grep 4[1-6]

输出如下:

17  ******41:41************************************************************
29  ************46*********************************************************
41  ***********************************************************************
42  ***********************************************************************
43  ***********************************************************************
44  ***********************************************************************
45  ***********************************************************************
46  ***********************************************************************

“ * ”是文件的内容(我用“ * ”替换它以不显示它们)。

因此,在本例中,正则表达式还捕获了第 17 行和第 29 行。我怎样才能仅捕获我指定的行号(在本例中为第 41-46 行)?

我尝试以各种组合使用“^”,但没有效果,例如“grep (^4[1-6]) ”。

答案1

^[并且]具有特殊含义,您必须对其进行转义或使用-P选项 (PCRE)

grep \^4\[1-6\]

或者

grep -P ^4[1-6]

或者,Perl 单行代码:

perl -ane 'print $_ if /^4[1-6]/' input_file

相关内容