Ответы:
Вы можете заменить обратную косую черту на пробел, как показано в примере с результатом:
sed 's/\\/ /g'
или вы можете удалить его, как показано в коде:
sed 's/\\//g'
Возможны проблемы с выходом из обратной косой черты, чтобы отменить его особое значение. Обратная косая черта - это специальный символ, используемый для экранирования как в оболочке, так и в регулярных выражениях.
Команда, которую вы вводите в командной строке оболочки или сценарии, сначала обрабатывается оболочкой, которая интерпретирует особое значение символов и их экранирование. Затем результат передается исполняемой команде (например sed
), которая выполняет свою собственную интерпретацию символов. Когда вы создаете команду, ментальная процедура работает противоположным образом: сначала добавьте экранирование для регулярного выражения, а затем добавьте экранирование для оболочки.
В регулярном выражении (ввод в команды, подобные sed
и grep
т. Д.) Обратная косая черта может быть экранирована обратной косой чертой, например, так: \\
вы также можете использовать выражение set, [\]
как вы использовали, потому что обратная косая черта теряет свое особое значение.
В оболочке (вроде bash
) вы можете избежать обратной косой черты. Так что вместо того, чтобы \
писать \\
. Заключение строки в двойные кавычки "
усложняет поведение обратной косой черты <1>, но двойная обратная косая черта по-прежнему будет вызывать одну обратную косую черту. Заключение строки в одинарные кавычки '
делает буквально каждый символ, кроме '
.
Если вы хотите использовать двойные кавычки , вы можете использовать одно из следующих:
sed "s/\\\\//g"
- Escape \
by \
в оболочке и \
снова экранируйте каждый в регулярном выражении. На самом деле двойные кавычки не нужны в этом случае, потому что каждый специальный символ правильно экранирован.
sed "s/[\\]//g"
- Побег в оболочке с помощью обратной косой черты \
и в регулярном выражении использовать набор [
]
.
sed "s/[\]//g"
- Да, ваш пример должен работать в POSIX-совместимой среде! Между двойными кавычками \
представлен сам, если он не предшествует специальному символу в контексте двойных кавычек: $`"\
или новой строки. Похоже, что в вашем случае либо оболочка, либо sed
не соответствует стандарту POSIX.
С одинарными кавычками вы также можете использовать строку как вы использовали или более короткий путь:
sed 's/[\]//g'
sed 's/\\//g'
В awk я бы так сделал,
$ echo 'NISHA =\455' | awk '{gsub(/\\/," ")}1'
NISHA = 455
sed 's/\\//'
Поместите \
перед, \
как вы делаете с большинством специальных символов.
g
флаг по неизвестной причине. Это меняет поведение команды, но такое изменение не было запрошено в вопросе. В противном случае ваш ответ не принесет ничего нового по сравнению с предыдущими ответами.
sed
(или, возможно, вы запускаете эту команду из оболочки не-POSIX?). Вам не нужно,sed
хотя,tr
достаточноtr -d '\\' < P
.