使用 Cygwin,上述命令不起作用。我不得不修改上面给出的命令以获得所需的结果。
$ cat > file.txt <<EOL
> data
> datalater
> 983290842
> Data387428later
> datafhj893724897290384later
> 4329804928later
> EOL
我总是喜欢确保我的文件具有我期望的内容:
$ cat file.txt
data
datalater
983290842
Data387428later
datafhj893724897290384later
4329804928later
$
我需要使用该-P
标志运行 Perl 风格的表达式。这意味着我不能使用[^0-9]+
,@Tom_Cammann 恰当地指出了它的必要性。相反,我使用.*
which 匹配任何不匹配模式下一部分的字符序列。这是我的命令和输出。
$ grep -P '^[Dd]ata.*\d+later$' file.txt
Data387428later
datafhj893724897290384later
$
我希望我能更好地解释为什么需要 Perl 表达式,但我只知道 Cygwin 的grep
工作方式有点不同。
系统信息
$ uname -a
CYGWIN_NT-10.0 A-1052207 2.5.2(0.297/5/3) 2016-06-23 14:29 x86_64 Cygwin
我以前答案的结果
$ grep '^[Dd]ata[^0-9]*\d\+later$' file2.txt
$ grep '^[Dd]ata\d+later$' file2.txt
$ grep -P '^[Dd]ata[^0-9]*\d\+later$' file2.txt
$ grep -P '^[Dd]ata\d+later$' file2.txt
Data387428later
$