1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【bash】`ls --color | grep "mhoge"`で`hoge`が引っかかるんじゃが

Last updated at Posted at 2024-10-21
$ ls --color
hoge  hoge2  hoge3

$ ls --color | grep "mhoge"
mhoge2
mhoge3

01.png

なんやこれ??????

ちなみに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

02.png

ここまで見ると、まあ色を付けるコードが悪さをしているのではなかろうかと予想がつきますね。

$ ls --color | cat -v
hoge
^[[0m^[[01;32mhoge2^[[0m
^[[01;34mhoge3^[[0m

03.png

なんか奇妙な文字が出てきました。
このよくわからない文字がおそらく色を付ける制御コードであり、grepではこちらも引っかかってしまうということなのでしょう。
これ、想定外の文字列が引っかかるのは仕様ということでいいんだろうか。

なお、--colorを付けなくても色が付く環境で--colorを外したところ、grepで表示されませんでした。
catすると制御コードが一切ありませんでした。

$ ls | grep "mhoge"


$ ls | cat -v
hoge
hoge2
hoge3

04.png

むしろ、こちらがいったいどうやって色を付けているのかのほうがわかりません。

おまけ

lsのパイプは万一事故るとたいへんなことになるのでお勧めされません

それじゃあどうすればいいんだ?

find -print0を使えらしいよ。
findは使い方がめんどくさいので、なんか簡単に使える方法を用意してほしいところですね。

というかlsのパイプで事故るのであれば、他コマンドのパイプでも事故るんじゃないのだろうか?
よく知らないけど。

1
0
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?