Попробуйте чистый bash
#!/bin/bash
TEST_STRING="{0,1}, alpha, {(x,y,z)}, {{1,2,3}, {a,b,c}}"
TEST_STRING="$TEST_STRING"","
count=0
newword=''
while [ "${TEST_STRING::1}" ] ; do
l="${TEST_STRING::1}"
TEST_STRING=${TEST_STRING:1}
[ "$l" = '{' ] && ((count++))
[ "$l" = '}' ] && ((count--))
if [ "$l" = ',' ] && ! ((count)) ; then
echo "Word='$newword'"
newword=''
else
if [ "$newword" ] || [ "$l" != " " ] ; then
newword="$newword""$l"
fi
fi
done
После некоторого исследования вопроса "если ext4
может обрабатывать ошибку чтения с блочных устройств" мой предварительный вывод:в ext4 существует лишь частичная избыточность
Вот некоторые результаты моего «анализа» ext4
«функций безопасности» (, основанные на Ext4 wiki и «Структура инода в файловой системе EXT4»)
ext4
хранят содержимое файла «блоки данных» и «метаблоки -данных» файловой системы отдельно. Насколько я понимаю, ext4
принимает только меры для некоторого ремонта/резервирования в отношении последних. ext4
block group descriptors
. ext4
функцией, которая частично заменяет старую непрямую адресацию блоков (IBA )), старые блоки IBA не защищены, как указано :Notice that there is neither a magic number nor a checksum to provide any level of confidence that the [IBA] block isn't full of garbage.
filespec
<inode-number>
в debuge2fs
. inode table
. Каждая запись в таблице инодов (, таблица разделена и части записываются в группы блоков, которые формируют ext4
структуру диска ), занимает (дополненные )256 байт. Следовательно, нечитаемый сектор должен означать потерю только от 2 до 16 файлов. Кроме того, благодаря функциям контрольной суммы любые повреждения в таблице индексных дескрипторов должны быть, если не обязательно, исправимыми, но не остаться незамеченными. ext4
, кажется, не защищает от чтобы проверить и доказать некоторые из перечисленных проблем с ext4
структурой диска (в отношении его устойчивости к поврежденным секторам )следующие инструменты удобны
debugfs <blockdev>
который позволяет получить доступ к файлам через спецификацию файлов (либо путь к файлу, либо в случае проблем через номер инода в< >
)truncate
, dd
, losetup
, mount
и mkfs.ext4
для создания ext4
файловых систем для игры. dumpe2fs
, tune2fs
, которые предоставляют информацию dm-setup
собрать виртуальное блочное устройство, имитирующее ошибку чтения, подобную этой :$> dmsetup create badsectordevice << EOF 0 2902 linear /dev/loop1 0 2902 2 error 2904 17576 linear /dev/loop1 2904 EOF, где, как показано в примере, сектор блочного устройства равен 512, а
ext4
размер блока равен 1024, следовательно, и, следовательно, сектора LBA 2902, 2903 не читаются.