3

В последнее время мне нужно было удалить новые неотслеживаемые файлы из моей системы управления версиями. Находясь в Linux, я использую:

hg status -un|xargs rm

И это работает хорошо, но когда вы делаете это в Windows, hg status перечисляет пути с обратной косой чертой, так что здесь все идет не так. Итак, я пытаюсь:

hg status -un|sed 's/\\/\//g'

... но я получаю ошибку: sed: -e выражение # 1, char 8: неопределенная команда `s '

Тогда я пытаюсь немного ascii:

`hg status -un|sed 's/\o134/\o57/g'` 

... это меня заводит: sed: -e выражение # 1, char 14: завершающий обратный слеш

И некоторые сценарии:

hg status -un|sed 's/`echo \`/`echo /`/g'

... это меня достает: sed: -e выражение # 1, символ 19: неизвестная опция для `s '

Я пробую все последние с любыми другими персонажами, и я получаю ожидаемый результат ... так что я полностью потерян. Конечно, у меня есть Cygwin, и я хочу избежать использования файла (это то, что я делал).

заранее спасибо

2 ответа2

2

герцог! ты делаешь это неправильно !, ты можешь использовать : вместо / для регулярного выражения:

hg status -un|sed 's:\\:/:g'

* Facepalm *

0

Чтобы избежать ошибки 'Trailing backslash', убедитесь, что вы не удаляете последнюю обратную косую черту. это можно сделать, убедившись в регулярном выражении, что другой символ без обратной косой черты всегда следует за заменяемым символом. Сед должен выглядеть следующим образом ...

sed "s:\\([^\]\+\):/\1:g"

.. что примерно переводится как:

найдите обратную косую черту, за которой следует по крайней мере 1 символ, который не является обратной косой чертой, и замените прямой слеш, за которым следуют другие совпадающие символы.

Обратите внимание, что в моем регулярном выражении (для bash) мне не нужно было избегать обратной косой черты, но мне нужно было избегать круглых скобок. '\1' является обратной ссылкой.

Надеюсь, что это имеет смысл!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .