$ ls --color
hoge hoge2 hoge3
$ ls --color | grep "mhoge"
mhoge2
mhoge3
なんやこれ??????
ちなみにm以外の文字だと検索に引っかかりません。
$ ls --color | grep "nhoge"
ls -l --color
でも同じように変なのが出てきます。
$ ls -l --color
-rw-rw-r-- 1 hoge
-rwxrwxrwx 1 hoge2
drwxrwxr-x 2 hoge3
$ ls -l --color | grep "mhoge"
-rwxrwxrwx 1 mhoge2
drwxrwxr-x 2 mhoge3
ここまで見ると、まあ色を付けるコードが悪さをしているのではなかろうかと予想がつきますね。
$ ls --color | cat -v
hoge
^[[0m^[[01;32mhoge2^[[0m
^[[01;34mhoge3^[[0m
なんか奇妙な文字が出てきました。
このよくわからない文字がおそらく色を付ける制御コードであり、grepではこちらも引っかかってしまうということなのでしょう。
これ、想定外の文字列が引っかかるのは仕様ということでいいんだろうか。
なお、--color
を付けなくても色が付く環境で--color
を外したところ、grepで表示されませんでした。
catすると制御コードが一切ありませんでした。
$ ls | grep "mhoge"
$ ls | cat -v
hoge
hoge2
hoge3
むしろ、こちらがいったいどうやって色を付けているのかのほうがわかりません。
おまけ
ls
のパイプは万一事故るとたいへんなことになるのでお勧めされません。
それじゃあどうすればいいんだ?
find -print0を使えらしいよ。
findは使い方がめんどくさいので、なんか簡単に使える方法を用意してほしいところですね。
というかlsのパイプで事故るのであれば、他コマンドのパイプでも事故るんじゃないのだろうか?
よく知らないけど。