テキストファイルにヌル文字のある文字列がある場合、while read lineで文字列を取得しても途中までしか取得できない。
例)sample.txt
aaaabbbbcccc(LF:改行)
ddddNULLeeee(LF:改行)
ffffgggghhhh(LF:改行)
-----------------
while read line
do
echo $line
done < sample.txt
------------------
実行結果)
aaaabbbbcccc
dddd←NULL文字より前の文字しか出力されない
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
想定してた結果とだいぶ違ったからビビったよ。