我的目录下有很多文件。我想将那些第一行包含“基因组”字的那些复制到一个新文件夹中。我该怎么做。我可以匹配这些行,但我不知道如何再次操作该文件。我建立了一个 bash 结构,例如
for i in *
do
if [ sed -ne 'genome' $i ]
then cp $i OTHERDIR
fi
done
但是似乎 if 语句可以做的事情非常有限,并且不像其他编程语言那样不能在其中包含 sed。
尝试这个:
for i in *
do
head -1 $i| grep "genome" && cp $i OTHERDIR
done
您可以使用 head -1 查看第一行:
for i in *
do
fline=`head -1 $i`
if [ "$fline" = genome ]
then cp $i OTHERDIR
fi
done
首先,您似乎没有尝试只检查第一行。head
正如其他海报所提到的,你的表达应该用来隔离第一行。
无论如何,您可以在 if 语句中使用 sed 或 grep 完成此任务。管道需要使用输出捕获 $()
使用 sed:您不需要-e
,它是默认设置。
$(head -1 $i | sed -n '/genome/=')
使用 grep:可能是更简单的解决方案。sed 胜任这项工作。
$(head -1 $i | grep genome)
http://www.unix.com/unix-dummies-questions-answers/65705-how-grep-only-1st-line.html
令人惊讶的是,我自己尝试了以下脚本并且它有效。尚未检查发布的答案。
for i in *
do
grep -l "genome" $i | xargs -I one cp one DESTDIR
done