Удалите обратные косые черты из текстового файла

Новый пакет VirtualBox называют virtualbox-4.2. Поэтому, если у Вас есть пакет virtualbox-4.1 или virtualbox установленный, это не покажется обновлением. Удаление установленной версии и установка новой должны работать:

$ sudo apt-get remove virtualbox
$ sudo apt-get install virtualbox-4.2 
10
21.11.2014, 12:51
5 ответов

Вы можете либо заменить обратный слеш на пробел, как показано в примере результата:

sed 's/\\/ /g'

или вы можете удалить его, как показано в вашем коде:

sed 's/\\//g'

Специальные символы

Возможны проблемы с экранированием обратного слеша для отмены его особого значения. Обратный слеш - это специальный символ, используемый для экранирования как в shell'е, так и в регулярных выражениях.

Команда, которую вы вводите в командную строку shell'а или скрипта, сначала обрабатывается shell'ом, который интерпретирует специальное значение символов и их экранирование. Результат затем передаётся в команду, которую нужно выполнить (как sed), которая выполняет свою собственную интерпретацию символов. Когда вы строите команду, ментальная процедура работает в обратном направлении: сначала добавляется escaping для регекса, а затем escaping для оболочки.

  1. В регексе (ввод в команды типа sed, grep и т.д.) обратный слеш может быть экранирован обратным слешем, как этот: \\, а также вы можете использовать установленное выражение [\], как вы использовали, потому что там обратный слеш теряет свое особое значение.

  2. В оболочке (как bash) вы можете избежать обратного слеша. Поэтому вместо \ напишите \\. Заключение строки между двойными кавычками " усложняет поведение обратного слеша<1> , но двойной обратный слеш все равно приведет к появлению одного обратного слеша. Заключение строки между одиночными кавычками ' делает обработку каждого символа буквальной, за исключением '.

Если вы хотите использовать двойные кавычки, вы можете использовать одну из следующих:
sed "s/\\\//g" - Escape \ по \ в оболочке, и снова бежать из каждого \ в регексе. На самом деле двойные кавычки в этом случае не нужны, так как каждый специальный символ экранируется правильно.
sed "s/[\\]//g" - Побег в оболочке с помощью обратного слеша \ и в регенерате используйте набор [ ].
sed "s/[\]//g" - Да, Ваш пример должен работать в POSIX-совместимом окружении! Между двойными кавычками \ представляет себя, если только он не предваряет специальный символ в контексте двойных кавычек: $``COPY2 или новая строка. Похоже, что в вашем случае либо оболочка, либо sed не следует стандарту POSIX.

С помощью одинарных кавычек вы также можете использовать строку в том виде, в каком вы ее использовали, или более коротким способом:
sed 's/[\]//g'
sed 's/\\//g'

20
27.01.2020, 19:59

Нужно обойтись без обратного слеша. Попробуйте:

sed 's/\\//g'
6
27.01.2020, 19:59

, Если вы не хотите 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
3
27.01.2020, 19:59

В awk, я сделал бы как это,

$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
2
27.01.2020, 19:59
sed 's/\\//'

Поместить \, прежде чем \ как вы сделают с наиболее специальными символами.

1
27.01.2020, 19:59

Теги

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