首页 > 解决方案 > 重定向到文件时,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

标签: bashgrep

解决方案


grep 中的 -z 选项将换行符替换为字符。在out.txt文本编辑器中显示空字符时,会导致出现问题。

打印到终端时不会出现同样的问题。


推荐阅读