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