как заменить одиночную точку с плавающей запятой на 0 с помощью регулярного выражения

dd не заботится о регистре, это зависит от файловой системы и ядра. И в Debian это будет -чувствительно к регистру. Таким образом, если /dev/sdcмог быть узлом устройства, /dev/sdC, вероятно, не существовал до тех пор, пока ddне создал его как обычный файл sdCвнутри /dev. /devвероятно, это tempfs:

% df -hT /dev
Filesystem     Type      Size  Used Avail Use% Mounted on
udev           devtmpfs  440M     0  440M   0% /dev

И его размер обычно ограничен долей оперативной памяти (по умолчанию 50%, я думаю ).

Итак, dd of=/dev/sdCсоздал файл с именем sdCв файловой системе tmpfs, а затем заполнил его до предела. Вероятно, вы ~2 ГБ ОЗУ используете зря (, так что, может быть, всего 4 ГБ ОЗУ? ).

dd of=/dev/sdcзаписал на устройство и залил. Шерлок Холмс сказал мне, что это диск на 16 ГБ.

0
25.08.2021, 19:27
1 ответ

Чтобы сопоставить числа, в которых может не быть цифр до или после запятой, вам понадобится регулярное выражение, например \d+(\.\d*)?|\.\d+.

По сути, есть четыре разных случая:

123
123.456
123.
.456

Вы не можете сделать необязательными как целую, так и дробную части, поскольку точка также не является обязательной, а одинокая точка, вероятно, не должна приниматься в любом случае.

Нам нужны как минимум две альтернативы.\d+(\.\d*)?соответствует числу с целой частью, за которой может следовать точка и ноль или более цифр в дробной части, то есть первые три случая. Вторая часть соответствует последнему случаю, который начинается с точки и имеет несколько цифр после нее.

Это по-прежнему возвращает .22и 22.как есть, но вы можете легко добавить проверку, чтобы увидеть, является ли точка первым или последним символом, и добавить недостающий ноль. Например. сre.sub():

#!/usr/bin/python3
import re, sys
m = re.match("^(\d+(\.\d*)?|\.\d+)$", sys.argv[1])
if not m: 
    print("no match")
    exit(1)

s = m.group()
print(s)
s = re.sub("^\.", "0.", s);
s = re.sub("\.$", ".0", s);
print(s)
1
25.08.2021, 21:59

Теги

Похожие вопросы