Едва-едва возможно соответствовать чрезвычайно минимальной системе Linux на дискете. (Вот несколько примеров; остерегайтесь этого, многие из них охватывают несколько дискет.) Со всего 1.44 МБ, существует, не имеют любую комнату для любого приложения; я думаю, что можно заставить минималистическую командную строку без интересной команды работать.
Как пример более реалистической крошечной системы, мой домашний маршрутизатор запускает Linux. Целый образ диска (ядро плюс программы) помещается в 4 МБ (на самом деле, я думаю, что это близко к 2.8 МБ). Это - специализированная система, со старой версией ядра, только драйверы, необходимые для того конкретного устройства и не многих программ — главным образом сетевые административные средства, включая маленький веб-сервер, клиент и сервер SSH, оболочку.
Распределение как Ubuntu или Fedora идет с тысячами программ. Некоторые из этих программ берут десятки МБ самостоятельно. Часть документации этих программ берет десятки МБ. Просто драйверы устройств для всех периферийных устройств, сетевые протоколы и другие части ядра берут приблизительно 100 МБ в эти дни — существует столько различных устройств, которые можно подключить к ПК.
Для базовой системы с GUI и веб-браузером, Вам будут нужны несколько сотен МБ. Для большей полной системы с полной настольной средой, текстовой процессор и так далее, рассчитывают на несколько ГБ. Если Вы начинаете иметь несколько альтернатив для каждой программы (Gnome и KDE, Firefox и Chrome, …), небо предел.
Если Вы испытываете желание соответствовать размеру Windows, имеете в виду, что дистрибутив Linux содержит намного больше, чем эквивалент Windows: дистрибутивы как Ubuntu и Fedora поставляют много приложений, которые необходимо было бы установить отдельно в Windows.
Вот a sed
тот, который даст Вам grep
- как поведение через несколько строк:
sed -n '/foo/{:start /bar/!{N;b start};/your_regex/p}' your_file
Как это работает
-n
подавляет поведение по умолчанию печати каждой строки/foo/{}
дает этому команду соответствовать foo
и сделайте то, что прибывает в squigglies в согласующие отрезки длинной линии. Замена foo
со стартовой частью шаблона.:start
переходящая маркировка должна помочь нам сохранить цикличное выполнение, пока мы не находим конец нашему regex./bar/!{}
выполнит то, что находится в squigglies к строкам, которые не соответствуют bar
. Замена bar
с конечной частью шаблона.N
добавляет следующую строку к активному буферу (sed
вызовы это пространство шаблона)b start
безусловно перейдет к start
маркируйте мы создали ранее, чтобы продолжать добавлять следующую строку, пока пространство шаблона не содержит bar
./your_regex/p
печатает пространство шаблона, если оно соответствует your_regex
. Необходимо заменить your_regex
по целому выражению Вы хотите соответствовать через несколько строк.Я обычно использую названный инструмент pcregrep
который может быть установлен в большей части использования аромата Linux yum
или apt
.
Для, например.
Предположим, назвали ли Вам файл testfile
с содержанием
abc blah
blah blah
def blah
blah blah
Можно выполнить следующую команду:
$ pcregrep -M 'abc.*(\n|.)*def' testfile
сделать сопоставление с образцом через несколько строк.
Кроме того, можно сделать то же с sed
также.
$ sed -e '/abc/,/def/!d' testfile
Вот более простой подход с помощью Perl:
perl -e '$f=join("",<>); print $& if $f=~/foo\nbar.*\n/m' file
или (так как JosephR взял sed
маршрут, я бесстыдно украду его предложение),
perl -n000e 'print $& while /^foo.*\nbar.*\n/mg' file
$f=join("",<>);
: это читает весь файл и сохраняет, это - содержание (новые строки и все) в переменную $f
. Мы затем пытаемся соответствовать foo\nbar.*\n
, и распечатайте его, если это соответствует (специальная переменная $&
содержит последнее найденное соответствие). ///m
необходим для создания соответствия регулярного выражения через новые строки.
-0
устанавливает входной разделитель записей. Установка этого к 00
активирует 'режим абзаца', где Perl будет использовать последовательные новые строки (\n\n
) как разделитель записей. В случаях, где нет никаких последовательных новых строк, читается весь файл (хлебал) сразу.
Не делайте этого для больших файлов, это загрузит весь файл в память, и это может быть проблемой.
Один способ сделать это с Perl. например, вот содержание названного файла foo
:
foo line 1
bar line 2
foo
foo
foo line 5
foo
bar line 6
Теперь, вот некоторый Perl, который будет соответствовать против любой строки, которая начинается с нечто, сопровождаемого любой строкой, которая начинается с панели:
cat foo | perl -e 'while(<>){$all .= $_}
while($all =~ /^(foo[^\n]*\nbar[^\n]*\n)/m) {
print $1; $all =~ s/^(foo[^\n]*\nbar[^\n]*\n)//m;
}'
Perl, сломанный:
while(<>){$all .= $_}
Это загружает весь стандартный вход в в переменную $all
while($all =~
В то время как переменная all
имеет регулярное выражение.../^(foo[^\n]*\nbar[^\n]*\n)/m
regex: нечто в начале строки, сопровождаемой любым количеством символов неновой строки, сопровождаемых новой строкой, сопровождаемой сразу "панелью" и остальной частью строки с панелью в нем. /m
в конце regex означает "соответствие через несколько строк"print $1
Распечатайте часть regex, который был в круглой скобке (в этом случае, все регулярное выражение)s/^(foo[^\n]*\nbar[^\n]*\n)//m
Сотрите первое соответствие для regex, таким образом, мы можем соответствовать нескольким случаям regex в рассматриваемом файлеИ вывод:
foo line 1
bar line 2
foo
bar line 6
perl -n0777E 'say $& while /^foo.*\nbar.*\n/mg' foo
– Joseph R.
02.02.2014, 15:10
Просто нормальный GREEP, который поддерживает Perl-Regexp
параметр P
, сделает это задание.
$ echo 'abc blah
blah blah
def blah
blah blah' | grep -oPz '(?s)abc.*?def'
abc blah
blah blah
def
(y)
Под названием Dotall-модификатор, который делает точку в вашем регуляторе для соответствия не только персонажам, но и разрывами линии.
Я решил этот для меня, используя вариант GreeP и -A с другим GREP.
grep first_line_word -A 1 testfile | grep second_line_word
Опция-A 1 отпечатает 1 строку после обнаруженной линии. Конечно, это зависит от вашего файла и комбинации слов. Но для меня это было самое быстрое и надежное решение.
Вы можете использовать Flashrom для обновления BIOS материнской платы.
Пример (ABIT KN9 Ultra):
Доска - доска AMD Athlon 64, сокет AM2, Chipset NVIDIA, выпущенная с 2006 года. Он имеет флеш-микросхему 256 КБ, который заменяемый. BIOS маркируется «наградой», который, кажется, является товарным знаком Phoenix.
Flashrom поддерживает этот чипсет и этот вспышек.
Поддержка может быть проверена с помощью команды, такой как:
# flashrom --programmer internal
Calibrating delay loop... OK.
Found chipset "NVIDIA MCP55".
Enabling flash write... OK.
Enabling full flash access for board "abit KN9 Ultra"... OK.
Found PMC flash chip "Pm49FL004" (512 kB, LPC, FWH) mapped at physical address 0x00000000fff80000.
имеет смысл резервного копирования текущего содержимого Flash Chip, сначала:
# flashrom --programmer internal -c Pm49FL004 -r backup.bin
Затем можно сравнить с файлом Vanilla Image от поставщика (например, XXD
и Vimdiff
).
Ожидается, что некоторые различия - потому что некоторые BIOS также хранят дополнительную информацию (например, DMI) и конфигурацию (E.G. MAC-адреса) во вспышке. Это также случай с ABIT KN9 Ultra. Данные DMI хранятся в первом 1872 байтах - и легко воссоздается BIOS во время загрузки. MAC-адреса хранятся на смещении 0x74e30.
Файлы прошивки поставщиков упаковываются в архиве ZIP, который содержит AWDFLASH.exe
и файл , например, файл
, например M520A_23.Bin
. В этом примере файл BIN содержит изображение BIOS AS - есть, т. Е. Это может быть непосредственно написано сделать Flash Chip с помощью команды, как:
# flashrom --programmer internal -c Pm49FL004 -w M520A_23.BIN
Calibrating delay loop... OK.
Found chipset "NVIDIA MCP55".
Enabling flash write... OK.
Enabling full flash access for board "abit KN9 Ultra"... OK.
Found PMC flash chip "Pm49FL004" (512 kB, LPC, FWH) mapped at physical address 0x00000000fff80000.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.
, в зависимости от обновления, может потребоваться очистить CMOS CMOS Для следующей перезагрузки - в противном случае BIOS может не запускать. На этой доске CMOS можно очистить через настройку перемычки. Также возможна очистка через программное обеспечение (например, через CMOSPWWD .
Для сохранения уникальных MAC-адресов по умолчанию новое изображение поставщика может быть исправлено перед миганием, например:
dd if=backup.bin of=mac.bin bs=1 count=16 skip=$(echo 16 i 74E30 p | dc)
dd if=mac.bin of=M520A_23_with_mac.bin bs=1 seek=$(echo 16 i 74E30 p | dc) \
conv=notrunc
подводными камнями:
Альтернатив GREP просеивает .
Предположим TestFile
содержит:
<book> <title>Lorem Ipsum</title> <description>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua</description> </book>
SIFT -M '<Описание>. *? Описание>'
(показать линии, содержащие описание)
Результат:
testfile: <description>Lorem ipsum dolor sit amet, consectetur testfile: adipiscing elit, sed do eiusmod tempor incididunt ut testfile: labore et dolore magna aliqua</description>
SIFT -M '<Описание> (. *?) Описание>' --replace 'Описание = "$ 1"' --NO-filename
(Извлечение и переформатирование описания)
Результат:
description="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua"