4

過去に問題が発生したことのない非常に基本的なコマンドを実行していますが、現在、望ましくない文字が不可解に返されています。

Linux で BASH を使用していて、単純にディレクトリを検索して、パターンに一致するファイル名を含むファイルを作成したいだけです。

ls | grep "*.file_ID" > my_list.txt

...これは正常に機能し、データを猫にすると:

   cat my_list.txt
       seriesA.file_ID
       seriesB.file_ID
       seriesC.file_ID

ただし、このファイルを下流プロセスにフィードしようとすると、ファイルがファイル名のリストとして適切にフォーマットされていないかのように、奇妙なエラーが発生し続けます。不要な文字を明らかにするために vim でファイルを開くと、ファイルは実際には次のようになっていることがわかります。

vi my_list.txt

^[[00mseriesA.file_ID^[[00m
^[[00mseriesB.file_ID^[[00m
^[[00mseriesC.file_ID^[[00m

何らかの理由で、すべての行が文字で開始および終了されます^[[00m。これらの文字を削除すると、下流のプロセスはすべて正常に動作します。ただし、スクリプトでそのようなファイル リストを自動的に作成する必要があるため、これらの文字を手動で削除し続けることはできません。

^[[00mキャラクターを生み出しているものを知っている人はいますか?それらがどこから来ているのかわからないので、それらなしでファイルを生成できるようにする必要があります。

ありがとう!

4

5 に答える 5

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
于 2013-07-16T19:02:54.343 に答える
1

これはそれを処理する必要があります (GNU find とディレクトリトラバースがないことを前提としています):

find . -maxdepth 1 -type f -name "*.file_ID" -printf "%f\n" > my_list.txt

例:

~> ls *file_ID*
a.file_ID  b.file_ID  c.file_ID

~> find . -maxdepth 1 -type f -name "*.file_ID" -printf "%f\n" > my_list.txt

~> cat my_list.txt
a.file_ID
b.file_ID
c.file_ID

"^[[00m" 文字に関しては、ls オプションを確認してください。

~> alias -p | grep "ls="

あなたは次のようなものを得るかもしれません:

alias ls='/bin/ls $LS_OPTIONS'

その場合は、env で次のことを確認してください。

~> env | grep LS_OP
LS_OPTIONS=-N --color=tty -T 0

参照している文字列は色をオフにするために使用されるため、シェルは色を表示するように設定されている可能性があります。ls エイリアスを削除または変更すると、解決するはずです。

于 2013-07-16T21:44:23.087 に答える