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
解决方案
grep 中的 -z 选项将换行符替换为空字符。在out.txt
文本编辑器中显示空字符时,会导致出现问题。
打印到终端时不会出现同样的问题。
推荐阅读
- ruby-on-rails - 运行“rails s”后如何修复“不安全的世界可写目录/mnt/c in PATH, mode 040777”错误
- here-api - 在 HERE Maps API 中检测鼠标点击位置上的所有对象
- angular - 有没有办法以角度设置路线数据的类型?
- java - 使用 tFTPConnection 的匿名 ftp 连接
- machine-learning - 仅使用新到达的数据重新训练时间序列(Keras)(不是从头开始的新训练)
- node.js - 客户端网络套接字在建立安全 TLS 连接之前断开连接 Node.js v13.0.1
- haskell - “:”运算符的 Haskell 类型问题
- powershell - 使用 pnp powershell 从现有 SharePoint 网站 url 创建 MS Teams
- java - 迭代时向 HashSet 添加元素
- amazon-web-services - 在 aws cloudsearch 中提取错误的结果