Новый пакет VirtualBox называют virtualbox-4.2. Поэтому, если у Вас есть пакет virtualbox-4.1
или virtualbox
установленный, это не покажется обновлением. Удаление установленной версии и установка новой должны работать:
$ sudo apt-get remove virtualbox
$ sudo apt-get install virtualbox-4.2
Вы можете либо заменить обратный слеш на пробел, как показано в примере результата:
sed 's/\\/ /g'
или вы можете удалить его, как показано в вашем коде:
sed 's/\\//g'
Возможны проблемы с экранированием обратного слеша для отмены его особого значения. Обратный слеш - это специальный символ, используемый для экранирования как в shell'е, так и в регулярных выражениях.
Команда, которую вы вводите в командную строку shell'а или скрипта, сначала обрабатывается shell'ом, который интерпретирует специальное значение символов и их экранирование. Результат затем передаётся в команду, которую нужно выполнить (как sed
), которая выполняет свою собственную интерпретацию символов. Когда вы строите команду, ментальная процедура работает в обратном направлении: сначала добавляется escaping для регекса, а затем escaping для оболочки.
В регексе (ввод в команды типа sed
, grep
и т.д.) обратный слеш может быть экранирован обратным слешем, как этот: \\
, а также вы можете использовать установленное выражение [\]
, как вы использовали, потому что там обратный слеш теряет свое особое значение.
В оболочке (как bash
) вы можете избежать обратного слеша. Поэтому вместо \
напишите \\
. Заключение строки между двойными кавычками "
усложняет поведение обратного слеша<1> , но двойной обратный слеш все равно приведет к появлению одного обратного слеша. Заключение строки между одиночными кавычками '
делает обработку каждого символа буквальной, за исключением '
.
Если вы хотите использовать двойные кавычки, вы можете использовать одну из следующих:
sed "s/\\\//g"
- Escape \
по \
в оболочке, и снова бежать из каждого \
в регексе. На самом деле двойные кавычки в этом случае не нужны, так как каждый специальный символ экранируется правильно.
sed "s/[\\]//g"
- Побег в оболочке с помощью обратного слеша \
и в регенерате используйте набор [
]
.
sed "s/[\]//g"
- Да, Ваш пример должен работать в POSIX-совместимом окружении! Между двойными кавычками \
представляет себя, если только он не предваряет специальный символ в контексте двойных кавычек: $``COPY2
или новая строка. Похоже, что в вашем случае либо оболочка, либо sed
не следует стандарту POSIX.
С помощью одинарных кавычек вы также можете использовать строку в том виде, в каком вы ее использовали, или более коротким способом:
sed 's/[\]//g'
sed 's/\\//g'
, Если вы не хотите sed решений, затем попробуйте следующими командами:
$ echo "NISHA =\455"| awk -F'\' '{print $1 $2}'
$ echo "NISHA =\455"| tr '\\' ' '
$ echo "NISHA =\455"| tr -d '\\'
$ echo "NISHA =\455"| cut -c 1-7,9-11
В awk, я сделал бы как это,
$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
sed 's/\\//'
Поместить \
, прежде чем \
как вы сделают с наиболее специальными символами.