私は次のegrepの動作に非常に戸惑っています。
LFで終了するファイルがあります。$'\n'
すべての行をgrepすると、期待どおりに返されます。$'\r\n'
ただし、ファイルにキャリッジリターンがない場合でも、grepを実行するとすべての行が返されます。なぜgrepはこの不可解な方法で動作するのですか?
[pjanowsk@krakow myplay2]$ cat sample.txt
a
b
n
c
[pjanowsk@krakow myplay2]$ file sample.txt
sample.txt: ASCII text
[pjanowsk@krakow myplay2]$ egrep $'\n' sample.txt
a
b
n
c
[pjanowsk@krakow myplay2]$ egrep $'\r\n' sample.txt
a
b
n
c
さらに、ファイルをCRLF終了に変換すると、改行のegrepingはすべての行に一致しますが、carriagereturn+newlineのegrepingは空の文字列を返します。なんで?
[pjanowsk@krakow myplay2]$ unix2dos sample.txt
unix2dos: converting file sample.txt to DOS format ...
[pjanowsk@krakow myplay2]$ file sample.txt
sample.txt: ASCII text, with CRLF line terminators
[pjanowsk@krakow myplay2]$ egrep $'\n' sample.txt
a
b
n
c
[pjanowsk@krakow myplay2]$ egrep $'\r\n' sample.txt
[pjanowsk@krakow myplay2]$
そして最後に、'\n'
強い引用符を使用してCスタイルのエスケープを使用せずにegrepを実行すると、バックスラッシュがなくても「n」に一致します。なんで?
[pjanowsk@krakow myplay2]$ egrep '\n' sample.txt
n