为什么在从grep输出创建文件时我会得到一些额外的,奇怪的字符?

jak*_*115 4 unix bash grep

我正在做一个非常基本的命令,从来没有给我带来过麻烦,但现在莫名其妙地回复了不受欢迎的角色.

我在linux上的BASH,只是想搜索目录并创建一个包含与模式匹配的文件名的文件:

ls | grep "*.file_ID" > my_list.txt
Run Code Online (Sandbox Code Playgroud)

...这很好,如果我抓住数据:

   cat my_list.txt
       seriesA.file_ID
       seriesB.file_ID
       seriesC.file_ID
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试将此文件提供给下游进程时,我不断收到一些奇怪的错误,就像文件没有正确格式化为文件名列表一样.当我在vim中打开文件以显示任何不必要的字符时,我发现该文件实际上是这样的:

vi my_list.txt

^[[00mseriesA.file_ID^[[00m
^[[00mseriesB.file_ID^[[00m
^[[00mseriesC.file_ID^[[00m
Run Code Online (Sandbox Code Playgroud)

出于某种原因,每一行都以字符开始和结束^[[00m.如果我删除这些字符,所有下游进程都可以正常工作.但是,我需要让我的脚本自动生成这样的文件列表,所以我不能继续进行并手动删除这些字符.

有谁知道是什么产生^[[00m角色?我不知道它们来自哪里,并且需要能够在没有它们的情况下生成文件.

谢谢!

use*_*621 8

可能你的GREP_OPTIONS环境变量包含--color=always,这会导致输出被控制字符填充,即使是通过管道传输到文件.

--color=auto改用.

http://www.gnu.org/software/grep/manual/html_node/Environment-Variables.html

更好的是,不要使用grep:

ls *.file_ID > my_list.txt
Run Code Online (Sandbox Code Playgroud)