у меня есть
Входные данные:
NISHA =\455
Вывод:
NISHA = 455
Я хочу удалить \
из вывода. Я пытался использовать команду, sed "s/[\]//g" P
но она не работает, и она отмечает ошибку:
character found after backslash is not meaningful
sed
regular-expression
Yisha
источник
источник
sed
(или, возможно, вы запускаете эту команду из оболочки не-POSIX?). Вам не нужно,sed
хотя,tr
достаточноtr -d '\\' < P
.Ответы:
Вы можете заменить обратную косую черту на пробел, как показано в примере с результатом:
или вы можете удалить его, как показано в коде:
Специальные символы
Возможны проблемы с выходом из обратной косой черты, чтобы отменить его особое значение. Обратная косая черта - это специальный символ, используемый для экранирования как в оболочке, так и в регулярных выражениях.
Команда, которую вы вводите в командной строке оболочки или сценарии, сначала обрабатывается оболочкой, которая интерпретирует особое значение символов и их экранирование. Затем результат передается исполняемой команде (например
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'
источник
Вы должны избежать обратной косой черты. Попробуй это:
источник
Если вы не хотите использовать решения sed, попробуйте выполнить следующие команды:
источник
В awk я бы так сделал,
источник
Поместите
\
перед,\
как вы делаете с большинством специальных символов.источник
g
флаг по неизвестной причине. Это меняет поведение команды, но такое изменение не было запрошено в вопросе. В противном случае ваш ответ не принесет ничего нового по сравнению с предыдущими ответами.