重定向到文件时,Grep输出不可读

时间:2018-09-26 15:08:24

标签: bash grep

我有一个脚本,该脚本接收ID列表作为第一个参数,并针对第二个参数给定的文件对每个ID进行grep:

while IFS='' read -r line || [[ -n "$line" ]]; do
    grep --line-buffered -Pzo '(>'"$line"')(.|\n)+?(?=>)' "$2"
done < "$1"

正常输出到终端

>XP_002012335.1 uncharacterized protein Dmoj_GI21415 [Drosophila mojavensis]
MAESRFNQLHLSAT 
...

但是如果将输出重定向到文件,如下所示:

./grep_script.sh id_query subject > out.txt

我的out.txt已损坏:

3e58 505f 3030 3230 3132 3333 352e 3120
756e 6368 6172 6163 7465 7269 7a65 6420
7072 6f74 6569 6e20 446d 6f6a 5f47 4932
3134 3135 205b 4472 6f73 6f70 6869 6c61
206d 6f6a 6176 656e 7369 735d 0a4d 4145

1 个答案:

答案 0 :(得分:2)

grep中的-z选项将换行符替换为 null 字符。 打开out.txt时,空字符在文本编辑器中显示时会引起问题。

打印到终端时不会发生相同的问题。