在 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