Как удалить специфический текст в файле, используя perl one liner? - PullRequest
0 голосов
/ 06 марта 2012

Я пытаюсь найти текст в файле XML и удалить только часть строки, в которой он есть.
Я нашел этот формат, чтобы попробовать: perl -p -i -e "s/$1/$2/g" $3 после некоторых поисков кода.

Итак, я использую этот код:

perl -p -i.bak -e "s/\'../../../specialText/\'//g" "C:/box/fileName.XML";

Что я хочу сделать, это удалить все из внутренних одинарных кавычек, как в: '.. / .. / .. / specialText /' , но использование q () или \ 'для экранирования не работает, и я не уверен, что .. не являются испортить вещи либо. Я предполагаю, что если не вставить что-либо в качестве замены текста, это удалится должным образом, но я не уверен.

Ошибки:

  1. Обратная косая черта найдена там, где ожидается оператор в -e строке 1, рядом с "/ specialText / \"

  2. (Отсутствует оператор до \?) синтаксическая ошибка в строке -e 1, рядом с "/ specialText / \"

  3. Невозможно найти терминатор строки "'" где-либо до EOF в строке -e 1.

Как переписать этот один вкладыш для достижения этой цели?

Это работает.

C:\box>perl -p -i.bak -e s/Copyright/bar/g Test.txt

Я попробовал это на другом файле, так что теперь мне просто нужно поиграть с ним, чтобы изменить мой оригинал

Ответы [ 2 ]

3 голосов
/ 06 марта 2012

Вы можете экранировать символы . и / в строке поиска, поставив обратную косую черту (\) перед каждым из них.

Однако, чтобы избежать острого синдрома наклоняющейся зубочистки , я бы рекомендовал вместо этого использовать альтернативные разделители регулярных выражений и \Q и \E escape-последовательности , например:

perl -p -i.bak -e "s(\Q'../../../specialText/'\E)()g" "C:/box/fileName.XML"
1 голос
/ 06 марта 2012

А что не так с использованием другого набора разделителей?

perl -p -i.bak -e "s{'../../../specialText/'}{}g" "C:/box/fileName.XML"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...