grep没有正常搜索

时间:2017-12-14 17:29:34

标签: 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_id$spc_lbl[]$all_species是数组的变量或元素。通常(所有其他文件正确显示结果,除了一个文件,所有文件都是由我的程序生成的,没有任何中断),如果删除“wc -l”,结果将显示如下所示的值

FRAME     0 11687 Fe  7744AL 
FRAME     1 11687 Fe  7744AL 
FRAME     2 11687 Fe  7744AL 
FRAME     3 11687 Fe  7744AL 
FRAME     4 11687 Fe  7744AL 
FRAME     5 11687 Fe  7744AL 
FRAME     6 11687 Fe  7744AL 
FRAME     7 11687 Fe  7744AL 
FRAME     8 11687 Fe  7744AL 
FRAME     9 11687 Fe  7744AL 
FRAME    10 11687 Fe  7744AL 
......

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

grep 'FRAME.*11687.*Fe' 15x200.lammpstrj.o_neighbors.raw.dat

结果将如上所示。

有什么不对或不正确吗?如何改进脚本?为什么相同的脚本可以用于除此之外的其他文件?任何进一步的建议都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

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

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