Bash 格雷普没有正确搜索

Bash 格雷普没有正确搜索,bash,perl,Bash,Perl,在我的Perl脚本中,我运行下面的bash代码 $tmp=`grep -E -n 'FRAME.*$atom_id'\$'\\s{1,}''$spc_lbl{$all_species}' $file_o_nghb_refine |wc -l` 其中,$tmp,$atom\u id,$spc\u lbl[],$all\u species是数组的变量或元素。正常情况下(除一个文件外,所有其他文件均正确显示结果,所有文件均由我的程序生成,无任何中断),如果删除“wc-l”,结果将显示如下值 但是,上

在我的Perl脚本中,我运行下面的bash代码

$tmp=`grep -E -n 'FRAME.*$atom_id'\$'\\s{1,}''$spc_lbl{$all_species}' $file_o_nghb_refine |wc -l`
其中,
$tmp
$atom\u id
$spc\u lbl[]
$all\u species
是数组的变量或元素。正常情况下(除一个文件外,所有其他文件均正确显示结果,所有文件均由我的程序生成,无任何中断),如果删除“wc-l”,结果将显示如下值

但是,上述代码无法正确显示一个文件。事实上,如果我直接使用bash代码,
grep'FRAME 0 11687'$'\s{0,}“Fe”15x200.lammpstrj.o_neights.raw.dat
我也找不到结果。如果我使用

grep 'FRAME.*11687.*Fe' 15x200.lammpstrj.o_neighbors.raw.dat
结果如上图所示


有什么不对或不恰当的地方吗?如何改进脚本?为什么相同的脚本可以用于除此之外的其他文件?任何进一步的建议都将不胜感激。

直接使用的bash代码无法工作,因为
$'\s{0,}'
与您认为的不一样。
$'…'
插入C转义序列,例如
$'\n'
扩展为换行符<代码>$'\s'只是未定义,并替换为
\s
。如果需要grep输入零个或多个空格字符,请使用

grep '...[[:space:]]*...'

perl调用grep似乎有点奇怪,因为它完全能够完成grep自己所做的事情,特别是因为正确调用
grep
需要比提供的代码多得多的代码。(注入错误,缺少错误处理)
grep '...[[:space:]]*...'