在我的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
结果将如上所示。
有什么不对或不正确吗?如何改进脚本?为什么相同的脚本可以用于除此之外的其他文件?任何进一步的建议都将受到高度赞赏。
答案 0 :(得分:1)
直接使用的bash代码无法正常工作,因为$'\s{0,}'
不符合您的想法。 $'...'
插入C转义序列,例如$'\n'
扩展为换行符。 $'\s'
只是未定义并替换为\s
。如果您需要grep零个或多个空格字符,请使用
grep '...[[:space:]]*...'