Надеюсь, цикл for
не нужен. попробуй это,
DIRECTORY_PATH=/path/to/dir
FILE_LIST=(`ls -p $DIRECTORY_PATH | grep -v / `)
printf '%s\n' "${FILE_LIST[@]}" | nl -v 1
read -r -p "please enter index number to open: " fileNO
cat $DIRECTORY_PATH/${FILE_LIST[$fileNO]}
FILE_LIST
список только файлов в данном каталоге printf
чтобы перечислить массив файлов один за другим nl
номер каждой строки read
для получения ввода во время выполнения cat
файл, индексируя массив В строке 
нет специальных символов, которые необходимо экранировать, чтобы строка интерпретировалась буквально в части шаблона команды s///
в sed
.
Кроме того, в замещающей строке нет специальных символов 0x02
, которые необходимо обрабатывать особым образом(&
были бы специальными при замене, как и \1
, \2
и т. д. и \n
, \t
и т. д., если вы используете GNUsed
).
Это означает, что вы должны уметь просто
sed 's//0x02/g' inputfile >outputfile
Единственное, что может потребовать особого внимания, это избегать замены 
в таких подстроках, как #
. Поскольку я не вижу в вопросе ни одного примера документа, я не могу точно сказать, будет ли это проблемой и как лучше всего защититься от нее.
Как правило, не используйте параметр -i
с sed
, пока у вас не будет sed
выражения редактирования или сценария, который, как вы знаете, работает, во избежание случайной потери данных. Вам также не нужно -E
здесь, так как мы вообще не имеем дело с расширенными регулярными выражениями.
Если вы используете команду sed
для файла, имя которого хранится в переменной,не забудьте заключить расширение этой переменной в двойные кавычки (см. Почему мой сценарий оболочки забивается пробелами или другими специальными символами?).