我正在尝试根据存储在bash脚本中可能包含(、)、[或]的变量中的模式从文件中提取一些行。我使用不包含特殊字符的模式获得所需的输出,但是使用(或),我得到一个空白输出,而在[或]中,我得到以下错误: grep: range在字符类中的顺序
模式文件示例:
14-3-3-like protein B
14-3-3-like protein B (Fragment)
3-oxoacyl-[acyl-carrier-protein] synthase 2输入文件示例:
seq1 gi|703124372 380 285 + 2e-154 14-3-3-like protein B sp
seq2 Q96451 69 51 + 3e-16 14-3-3-like protein B (Fragment) sp
seq3 P0AAI5 104 84 - 4e-20 3-oxoacyl-[acyl-carrier-protein] synthase 2 sp我的代码如下:
if [ $@==0 ]
then echo -e "\nUSAGE: $0 [pattern file] [in file] > [out file]\n"
exit;
else
while read line; do
echo -e "Pattern: $line"
grep -P "\t$line\t" $2
echo -e "\n"
done < $1产出样本:
Pattern: 14-3-3-like protein B
seq1 gi|703124372 380 285 + 2e-154 14-3-3-like protein B sp
Pattern: 14-3-3-like protein B (Fragment) sp
Pattern: 3-oxoacyl-[acyl-carrier-protein] synthase 2
grep: range out of order in character class我尝试过使用grep -Fw,但这也不能提供所需的输出。我还尝试用\(和\[代替(和[来替换两个输入文件中的模式,但这也不起作用。
你知道我怎么能做到这一点吗?我还有什么可以代替grep的吗?
发布于 2015-10-21 14:58:44
tab=$(echo -e \\t)
grep -F "$tab$line$tab" $2编辑:也见@anubhava:grep -F $'\t'"$line"$'\t' "$2"的建议
https://stackoverflow.com/questions/33261427
复制相似问题