2016-10-24 11 views
2

といくつかのファイルのために、結果のファイル名を印刷しません。そのファイルパスは:私は^S^H^B^R^Mを削除する場合grepが、私は特殊文字を使用してこの特定のファイルを持っている特殊文字

Long is here 

ただし、ファイルパスが表示されます:

./CIQla:Long is here​ 

私はOSXを使用しています。

ここでは何が起こっていますか?


EDIT:

Iは、GNUのgrepの(ggrep 2.26

+0

ファイル名を印刷するために '-H'を使用するとどうなりますか?一般に、 'grep'はファイル名が1つしかない場合はファイル名を表示しません。 – fedorqui

+1

'-H'オプションは、検索するファイルが複数あるときに'デフォルトです。 '...これらの特殊文字はgrep出力の文字を上書きしています。 – Sundeep

+0

@fedorqui' -H'はファイルパスを表示しません。 '-l'はそうです。しかし、それらの特殊文字がgrepがファイルパスを印刷するのを防ぐことができるのは私の謎です。 –

答えて

3

^Mは、の先頭にターミナルリターンするキャリッジリターン、あるとして両方のBSDはgrep(grep 2.5.1-FreeBSD)でそれを試してみましたこの線。本質的に、それは "./CIQla:"を出力し、次にいくつかの非印字文字を^ Mは行の先頭に送り、次に "長さはここにある" を "./CIQla:"のに印刷します。

出力でファイル名を確認したい場合は、^ M(とおそらく他の印刷できない文字)を印刷可能なものに変換する必要があります。

grep -r "Long is here" . | cat -v 
grep -r "Long is here" . | more 
+0

'grep ... | od -c'は余分な文字を表示する*本当に*なります。 –