герцог! ты делаешь это неправильно !, ты можешь использовать :
вместо /
регулярного выражения:
hg status -un|sed 's:\\:/:g'
* Facepalm *
В последнее время мне нужно было удалить новые неотслеживаемые файлы из моей системы управления версиями. Находясь в 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, и я хочу избежать использования файла (это то, что я делал).
заранее спасибо
герцог! ты делаешь это неправильно !, ты можешь использовать :
вместо /
регулярного выражения:
hg status -un|sed 's:\\:/:g'
* Facepalm *
Чтобы избежать ошибки 'Trailing backslash', убедитесь, что вы не удаляете последнюю обратную косую черту. это можно сделать, убедившись в регулярном выражении, что другой символ без обратной косой черты всегда следует за заменяемым символом. Сед должен выглядеть следующим образом ...
sed "s:\\([^\]\+\):/\1:g"
.. что примерно переводится как:
найдите обратную косую черту, за которой следует по крайней мере 1 символ, который не является обратной косой чертой, и замените прямой слеш, за которым следуют другие совпадающие символы.
Обратите внимание, что в моем регулярном выражении (для bash) мне не нужно было избегать обратной косой черты, но мне нужно было избегать круглых скобок. '\ 1' является обратной ссылкой.
Надеюсь, что это имеет смысл!