/dev/mem
обеспечивает доступ ко всему физическому адресному пространству. Микропрограмма BIOS является частью этого адресного пространства (. Ваш компьютер должен иметь некоторый код для запуска при включении питания -).
Таким образом, Linux «не копировал информацию SMBIOS в память», 0xe0000
— это базовый адрес BIOS с древних времен, и чтение этого через /dev/mem
будет считываться непосредственно из ПЗУ (, если только BIOS не заменил себя с теневой оперативной памятью во время процесса загрузки, но опять же, это не имеет ничего общего с Linux ).
Если все, что вы действительно хотите сделать, это заменить 4M
на 4_M
, тогда вариант вашего регулярного выражения делает это:
$ ls
something_4M_something_something_manyothersomethings.csv
$ rename -n 's/4M/4_M/' *
'something_4M_something_something_manyothersomethings.csv' would be renamed to 'something_4_M_something_something_manyothersomethings.csv'
Регулярное выражение работает со всем внутри имени, поэтому вам не нужно делать что-то конкретное, чтобы сохранить ведущее «что-то».
Если вы хотите сделать что-то еще, например переместить первое «что-то» во второе «что-то» или ограничить 4M
первым вхождением после подчеркивания, отредактируйте свой вопрос и уточните.
Как отмечено в комментариях, -n
выполняет пробный -запуск, поэтому он показывает, что должно было бы произойти, и на самом деле не выполняет операцию.
Поскольку пример в вопросе уже использовал -n
, я исходил из того, что это понял спрашивающий.
Использование Raku (, ранее известного как Perl _6)
Для одного файла:
~$ raku -e ' \
my $name = dir(test => /^ something_4M_somethingelse \. csv $/)[0]; \
my $modname = S/^ something_<(4M)>_somethingelse \. csv $/4_M/.IO given $name; \
($name,$modname).say; \
#rename($name,$modname, createonly => True);'
Для нескольких файлов:
~$ raku -e ' \
my @names = dir(test => /^ something_<digit><upper>_somethingelse \. csv $/); \
my @modnames = do for @names {S/^ something_<(<digit><upper>)>_somethingelse \. csv $/$<digit>_$<upper>/.IO given $_;}; \
for [Z] @names,@modnames -> ($x,$y) { ($x,$y).say }; \
#for [Z] @names,@modnames -> ($x,$y) { rename($x,$y, createonly => True) };'
Ввод каталога:
~$ ls
something_4M_somethingelse.csv something_5N_somethingelse.csv something_6O_somethingelse.csv
Вывод каталога (несколько -переименование файла):
~$ ls
something_4_M_somethingelse.csv something_5_N_somethingelse.csv something_6_O_somethingelse.csv
ПРЕДОСТЕРЕЖЕНИЕ:Сначала делайте резервные копии!!
Краткое объяснение (однократное -переименование файла ):получение dir()
списка интересующего файла --с помощью регулярного выражения -соответствия ("наречие" )вариант test => /... /
, и брать только один элемент независимо от ([0]
), сохраняя его в скалярной переменной $name
.Проверка этой переменной показывает, что это объект .IO
.
Используйте знакомую идиому S///
для изменения переменной given $name
и сохраните измененное имя как $modname
. Обратите внимание, что S///
преобразуется в строку, поэтому вызов метода .IO
добавляется в конец S///
, так что $modname
также является объектом .IO
.
В регулярном выражении незнакомым символом может быть обозначение <(…)>
. Но это всего лишь маркеры захватаРаку , поэтому, хотя распознается все совпадение в левой половине S///
, захватывается и модифицируется только совпадение 4M
в пределах <(…)>
в правой половине S///
.
Если нужные начальные/конечные .IO
объекты получены, строка ($name,$modname).say;
должна выдавать вывод, аналогичный следующему:
("something_4M_somethingelse.csv".IO "something_4_M_somethingelse.csv".IO)
Когда все выглядит хорошо, вы можете раскомментировать последнюю rename()
строку кода Raku, чтобы фактически переименовать файлы, перечисленные в предпоследней строке, на .say
.
Примечание :Включение наречия/параметра createonly => True
в код rename()
выше означает, что rename()
не затирает существующее имя файла (более короткая форма :createonly
делает то же самое ). Удалите наречие/параметр createonly => True
или :createonly
, чтобы получить значение по умолчанию (False
, т.е. затирание )и разрешить переименование -в (перезапись -из )предварительно -существующего файла /имя файла.
https://docs.raku.org/syntax/S$SOLIDUS$SOLIDUS$SOLIDUS
https://docs.raku.org/routine/rename
https://raku.org