首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在shell脚本中添加包含特殊字符的变量

在shell脚本中添加包含特殊字符的变量
EN

Stack Overflow用户
提问于 2015-10-21 14:01:46
回答 1查看 3.2K关注 0票数 1

我正在尝试根据存储在bash脚本中可能包含()[]的变量中的模式从文件中提取一些行。我使用不包含特殊字符的模式获得所需的输出,但是使用(),我得到一个空白输出,而在[]中,我得到以下错误: grep: range在字符类中的顺序

模式文件示例:

代码语言:javascript
复制
14-3-3-like protein B
14-3-3-like protein B (Fragment)
3-oxoacyl-[acyl-carrier-protein] synthase 2

输入文件示例:

代码语言:javascript
复制
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

我的代码如下:

代码语言:javascript
复制
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

产出样本:

代码语言:javascript
复制
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的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-21 14:58:44

代码语言:javascript
复制
tab=$(echo -e \\t)
grep -F "$tab$line$tab" $2

编辑:也见@anubhava:grep -F $'\t'"$line"$'\t' "$2"的建议

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33261427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档