duke !, você está fazendo errado !, você pode usar :
em vez de /
para o regex:
hg status -un|sed 's:\:/:g'
* facepalm *
Ultimamente, tenho precisado excluir novos arquivos não acompanhados do meu sistema de controle de versão. Sendo no linux eu uso:
hg status -un|xargs rm
E funciona bem, mas ao fazer isso no Windows, hg status
lista caminhos com barra invertida, e é aí que as coisas dão errado. Então eu tento:
hg status -un|sed 's/\/\//g'
... mas recebo o erro: sed: -e expressão # 1, char 8: comando 's' não terminado
Então eu tento alguns ascii:
'hg status -un|sed 's/\o134/\o57/g''
... isso me pega: sed: -e expressão # 1, char 14: Trailing backslash
E alguns scripts:
hg status -un|sed 's/'echo \'/'echo /'/g'
... isso me ajuda: sed: -e expressão # 1, char 19: opção desconhecida para 's'
Eu tento o último com qualquer outro personagem e recebo a saída esperada ... então estou completamente perdido. Eu tenho cygwin, é claro, e eu quero evitar o uso de um arquivo (é isso que eu tenho feito).
Obrigado antecipadamente
Para evitar o erro "Trailing backslash", certifique-se de não remover a última barra invertida. Isso pode ser feito garantindo no regex que outro caractere 'não-invertido sempre segue o caractere a ser substituído. o sed deve ficar assim ...
sed "s:\([^\]\+\):/:g"
.., que traduz aproximadamente como:
encontre uma barra invertida, seguida por pelo menos 1 caractere que não seja uma barra invertida, e substitua por uma barra seguida pelos outros caracteres correspondentes.
Note que no meu regex (para bash) eu não precisei escapar das barras invertidas, mas eu precisava escapar das chaves redondas. O '\ 1' é uma referência de volta.
Espero que isso faça sentido!
Tags command-line windows sed linux hg