Поиск и замена обратной косой черты для прямой косой черты в окнах

2685
dukeofgaming

В последнее время мне нужно было удалить новые неотслеживаемые файлы из моей системы управления версиями. Находясь в 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, и я хочу избежать использования файла (это то, что я делал).

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

3

2 ответа на вопрос

2
dukeofgaming

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

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

* Facepalm *

0
Mike

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

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

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

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

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

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