Linux 如何从脚本运行grep并将输出存储在bash脚本的目标目录中的文件中

Linux 如何从脚本运行grep并将输出存储在bash脚本的目标目录中的文件中,linux,bash,shell,sed,grep,Linux,Bash,Shell,Sed,Grep,我试图通过bash脚本从文件中过滤出行。通过运行命令,我可以从脚本位置找到文件的路径 Fgff=`find $D -maxdepth 1 -type f -name "*.gff"` 我可以通过运行命令将列添加到找到的.gff文件中 sed -i '1 s/$/\tsample/; 1! s/$/\t'${D##*/}'/' $Fpsi 但是,如果我尝试过滤该文件并将输出写入同一文件夹中的另一个文件,那么它将不起作用 grep 'ENSG00000155657\|ENSG0000019

我试图通过bash脚本从文件中过滤出行。通过运行命令,我可以从脚本位置找到文件的路径

Fgff=`find $D -maxdepth 1 -type f -name "*.gff"`
我可以通过运行命令将列添加到找到的.gff文件中

   sed -i '1 s/$/\tsample/; 1! s/$/\t'${D##*/}'/' $Fpsi
但是,如果我尝试过滤该文件并将输出写入同一文件夹中的另一个文件,那么它将不起作用

grep 'ENSG00000155657\|ENSG00000198947' $Fgff > "$Fgff$filtered"
我想知道格雷普为什么不工作

如何过滤文件apple.gff(位于
/dira/dirb/apple.gff
)中包含子字符串ENG00000155657或ENG00000198947的所有行,并将其存储在
/dira/dirb/applefiltered.gff


谢谢

如果$Fgff包含正确的文件名,您的grep命令将完全按照您的要求执行,在您可能需要的时候搜索字符串“ensg000015565(7\| E)nsg0000198947”(ensg0000155657)\|(ensg0000198947)”

使用
grep-E'ensg0000155657 | ensg0000198947'
并丢失反斜杠。
-E
打开扩展正则表达式(
egrep
模式,对于我们这些在上个千年学习过Unix的人来说)。一般来说,最好使用
$(…)
而不是反勾号来捕获命令的输出。文件名中的空格和其他奇怪字符也可能存在问题,您可能需要担心。@JonathanLeffler感谢-E并删除/完成了这个技巧。除原始文件外,文件制作在同一目录中。在发布问题之前花了几个小时,但现在高兴地整理好了。这是对原始正则表达式不太可能的解释。@JonathanLeffler谢谢你纠正我,我修改了我对正则表达式的理解。