我正在尝试根据存储在bash脚本中的变量中的模式从文件中插出一些行,这些变量可能包含(
,)
,[
或]
。我得到了所需的输出,其中包含不包含特殊字符的模式但使用(
或)
,我得到一个空白输出,并使用[
或]
,我得到了以下错误:
grep:字符类中的范围无序
模式文件示例:
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吗?
答案 0 :(得分:0)
tab=$(echo -e \\t)
grep -F "$tab$line$tab" $2
编辑:
另见@anubhava的建议:grep -F $'\t'"$line"$'\t' "$2"