我试图根据存储在 bash 脚本变量中的模式从文件中 grep 出一些行,该变量可能包含 (
, )
, [
或 ]
。我使用不包含特殊字符但使用 (
或 )
的模式获得所需的输出,我得到空白输出并使用 [
或]
,我收到以下错误:
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,还有什么我可以使用的吗?
最佳答案
tab=$(echo -e \\t)
grep -F "$tab$line$tab" $2
编辑:
另请参阅@anubhava 的建议:grep -F $'\t'"$line"$'\t' "$2"
关于regex - grepping shell脚本中包含特殊字符的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33261427/