Альтернатива regex для {}

Вы выполняете amd64 ядро на amd64 процессоре (x86_64, и amd64 являются синонимами). Вы выполняете i386 распределение. Другими словами, Вы выполняете 32-разрядные двоичные файлы с 64-разрядным ядром. Посмотрите команду Linux для возврата числа битов (32 или 64)? для некоторого фона.

На Linux можно выполнить i386 исполняемые файлы на amd64 ядре, но не наоборот. Таким образом, Вы могли установить двоичный файл amd64 VirtualBox, однако он не может прибыть из Вашего текущего распределения, которое имеет только 32-разрядные исполняемые файлы и библиотеки.

Двоичный файл i386 VirtualBox может выполнить изображение amd64, но только если Ваш процессор имеет расширения виртуализации ЦП (Intel VT-x или AMD-V). Если это не делает, необходимо выполнить amd64 VirtualBox, который можно установить независимо (но у Вас должны будут быть все библиотеки, которых исполняемые файлы VB требуют), или в распределении, которое Вы устанавливаете в schroot.

2
20.09.2013, 00:22
4 ответа

Вы могли передать его по каналу через sed извлечь только, что в символах кавычки.

например.

$ echo 'looktype="123"' | sed -r -e 's/^.*"([^"]+)".*/\1/'
123

Отметьте это -r характерно для GNU sed, он говорит sed использовать расширенный а не основной regexps. Другие версии sed не имейте его, или мог бы использовать -E вместо этого. Иначе запишите это в основном регулярном выражении (BRE) POSIX как:

sed -e 's/^.*"\([^"][^"]*\)".*/\1/'
1
27.01.2020, 22:01
  • 1
    и если это - только числа, Вы интересуетесь, Вы могли бы быть еще более характерны с ним для sed -e 's/^.*"\([0-9]*\)"/\1/' –  umläute 19.09.2013, 17:26

В расширенных регулярных выражениях (ERE), X{m,n} средства X повторенный между m и n времена. Awk реализует расширенные регулярные выражения, однако исторические реализации awk не имели этого синтаксиса фигурной скобки для повторных интервалов. Стандарт POSIX указывает, что awk должен поддерживать ДО, но много существующих реализаций не совместимы.

С GNU awk, интервалы поддерживаются только начиная с версии 4.0. С более старыми версиями можно вынудить простофилю быть POSIX, совместимым путем установки POSIXLY_CORRECT переменная среды к непустому значению:

POSIXLY_CORRECT=1 awk '{sub ("looktype=\"[0-9]{0,3}", "TEST"); print}'

Версия по умолчанию awk на некоторых дистрибутивах не является простофилей, но mawk, который меньше и быстрее. Mawk не поддерживает выражения фигурной скобки. Существует патч для этого, но поскольку mawk не сохраняется, он широко не принят.

Когда количество повторения является маленьким, можно обстоятельно объяснить его:

awk '{sub ("looktype=\"[0-9]?[0-9]?[0-9]?[0-9]?", "TEST"); print}'
3
27.01.2020, 22:01

В awk (принятие точного входа, который Вы отправили), Вы могли также сделать это:

awk -F'=' '{print $2}' | sed 's/"//g'
0
27.01.2020, 22:01

Альтернатива в GNU grep (который я предполагаю, что Вы имеете вследствие тега Ubuntu):

grep -o '[0-9]\+' your_file

Еще больше портативной альтернативы с Perl

perl -nle '/([0-9]+)/ and print $1' your_file

Эти две альтернативы не являются точно тем же. Они ведут себя по-другому, если у Вас есть несколько экземпляров строки цифр на той же строке. grep оператор распечатает каждое возникновение цифр на отдельной строке в то время как perl оператор только распечатает крайнее левое возникновение строки цифр в каждой строке. Это происходит из-за различия во внутренней реализации механизма регулярных выражений между grep и Perl.

0
27.01.2020, 22:01

Теги

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