底辺過ぎてちょっとビビる

26歳からIT業界にいるエンジニアが、まったく成長できてないことを確認するブログ。備忘録的に使いたいとも考えています。

【sh】ヌル文字とwhile read line

テキストファイルにヌル文字のある文字列がある場合、while read lineで文字列を取得しても途中までしか取得できない。

 


例)sample.txt

aaaabbbbcccc(LF:改行)

ddddNULLeeee(LF:改行)

ffffgggghhhh(LF:改行)
-----------------

while read line
do
    echo $line
done < sample.txt

------------------

実行結果)
aaaabbbbcccc
ddddNULL文字より前の文字しか出力されない
ffffgggghhhh


こんな感じでNULL文字までしか出力されない・・・。
では、どうするか?


sedコマンドで1行ずつ持ってくる方法がある。
sedコマンドは置換処理で利用することが多いけど、何行目から何行目まで
という指定をして切り出すことも出来る。

1~3行目まで取得する。
cat sample.txt | sed -n "1,3p"

------------------

aaaabbbbcccc
ddddNULLeeee
ffffgggghhhh

これで、文字列内にNULL文字があっても、最後まで読み込んで出力される。
それと関係ないけど、echoコマンドは半角スペースを詰めて出力するんだね。
知らんかった。


例)echo ”aaaa__bbbb_____cccc ”

------------------
aaaa_bbbb_cccc

想定してた結果とだいぶ違ったからビビったよ。