Видаліть накипи з текстового файлу


10

Я маю

Вхід:

 NISHA =\455  

Вихід:

 NISHA = 455

Я хочу видалити \з виводу. Я намагався використовувати команду, sed "s/[\]//g" Pале вона не працює, і вона позначає помилку:

character found after backslash is not meaningful

3
Здається, у вас не-POSIX-реалізація sed(або можливо, ви запускаєте цю команду з не-POSIX-оболонки?). Вам не потрібно , sedхоча, trдосить: tr -d '\\' < P.
Stéphane Chazelas

Відповіді:


20

Ви можете або замінити нахил косою рисою на пробіл, як показано в прикладі результату:

sed 's/\\/ /g'

або ви можете видалити його, як ви показуєте у своєму коді:

sed 's/\\//g'

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

Можливі проблеми з уникненням зворотної косої риси, щоб скасувати її особливе значення. Зворотна коса - особливий символ, який використовується для втечі як в оболонці, так і в регулярних виразах.

Команда, яку ви вводите в командний рядок оболонки або скрипт, спочатку обробляється оболонкою, яка інтерпретує особливе значення символів та їх втечу. Потім результат передається команді, яка виконується (як sed), яка виконує власну інтерпретацію символів. Коли ви будуєте команду, ментальна процедура є зворотним способом: спочатку додайте вхідний символ для регулярного вираження, а потім додайте вхідний для оболонки.

  1. У регулярних виразах (вхід для команд , таких як sed, і grepт.д.) зворотної косої межі можна уникнути з допомогою зворотної косої межі: \\а також ви можете використовувати вираз набору , [\]як ви використовували , тому що зворотна коса втрачає свій особливий сенс.

  2. У оболонці (як bash) ви можете уникнути зворотної косої риси шляхом зворотного нахилу. Тож замість \пишіть \\. Замикання рядка між подвійними лапками "ускладнює поведінку зворотної косої риски <1>, однак подвійний кут нахилу все ще створюватиме одну похилу рису. Замикання рядка між окремими лапками 'змушує кожного символу оброблятись буквально за винятком '.

Якщо ви хочете використовувати подвійні лапки , ви можете використовувати одну з наступних дій :
sed "s/\\\\//g"- втеча \від \в оболонці, і бігти кожен \в регулярному виразі знову. Насправді подвійні лапки в цьому випадку не потрібні, оскільки кожен спеціальний персонаж належним чином уникнути.
sed "s/[\\]//g"- Втекти в оболонці за допомогою зворотного нахилу \і в регулярному вираженні використовуйте набір [ ].
sed "s/[\]//g"- Так, ваш приклад повинен працювати в сумісному з POSIX середовищем! Між подвійними лапками \представляє себе, якщо це не передує спеціального символу в контексті подвійних лапок: $`"\або нового рядка. Схоже, що у вашому випадку або оболонка, або оболонка sedне відповідають стандарту POSIX.

За допомогою одиничних лапок ви також можете використовувати рядок як раніше, або коротшим способом:
sed 's/[\]//g'
sed 's/\\//g'


6

Вам потрібно уникнути зворотної косої риски. Спробуйте це:

sed 's/\\//g'

3

Якщо ви не хочете рішення 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


1
sed 's/\\//'

Розмістіть \перед тим, \як ви робите більшість спеціальних символів.


Ви пропустили gпрапор з невідомих причин. Це змінює поведінку команди, але такої зміни в запитанні не вимагалося. Інакше ваша відповідь не приносить нічого нового порівняно з попередніми відповідями.
пабук
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.