У меня есть скрипт, который пытается получить блоки информации от gparted.
Мои данные выглядят так:
Disk /dev/sda: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 316MB 315MB primary ext4 boot
2 316MB 38.7GB 38.4GB primary ext4
3 38.7GB 42.9GB 4228MB primary linux-swap(v1)
log4net.xml
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Number Start End Size Type File system Flags
1 1049kB 316MB 315MB primary ext4 boot
5 316MB 38.7GB 38.4GB primary ext4
6 38.7GB 42.9GB 4228MB primary linux-swap(v1)
Я использую регулярное выражение, чтобы разбить его на два дисковых блока
^ Диск (/dev [\ S] +): ((?! Диск) [\ s\S]) *
Это работает с многострочным.
Когда я проверяю это в bash-скрипте, я не могу найти совпадения с \s или\S - что я делаю не так?
Я проверяю это с помощью сценария, как:
data='cat disks.txt'
morematches=1
x=0
regex="^Disk (/dev[\S]+):((?!Disk)[\s\S])*"
if [[ $data =~ $regex ]]; then
echo "Matched"
while [ $morematches == 1 ]
do
x=$[x+1]
if [[ ${BASH_REMATCH[x]} != "" ]]; then
echo $x "matched" ${BASH_REMATCH[x]}
else
echo $x "Did not match"
morematches=0;
fi
done
fi
Однако, когда я прохожу тестирование частей регулярного выражения, всякий раз, когда я сопоставляю \s или\S, это не работает - что я делаю не так?