Ну, бинарный ... личное предложение: не используйте простую старую оболочку - используйте подходящий для работы инструмент.Perl, Python, даже программа на C / C ++ - в большинстве случаев они будут однострочными.
Ниже приведен неоптимизированный хак, чтобы дать вам представление:
#!/bin/bash
lowerlimit=-333;
upperlimit=333;
filesize=`wc -c "$1" | cut -d' ' -f1`;
off=0;
while [ $off -lt $filesize ]; do
shortval=$(od -An -s -N 2 -j $off "$1")
test $shortval -gt $lowerlimit &&
test $shortval -lt $upperlimit &&
dd if="$1" bs=1 count=2 skip=$off 2>/dev/null
off=$(($off + 2))
done
IЯ не уверен, что это можно сделать простым способом из-за того, что оболочка использует разделители строк для разделения входных блоков.