Pergunta

Eu corro o seguinte href="http://www.ocf.berkeley.edu/sysadmin-class/2008-fall/intermediate/week05_slides" rel="nofollow código

sed 's/\([^ ]+\) your \([^ ]+\)/ \2\1er/' < fail

O arquivo falhar é

fail your test

O comando acima dá-me

fail your test

embora deva dar "testfailer".

O segundo e primeiro \2\1 globs deve ser no início da palavra "er". Isso me sugere que o problema pode estar nas expressões regulares na parte de pesquisa. No entanto, eles parecem ser correto para mim.

Você vê qualquer erro no código?

Foi útil?

Solução

Seu código funciona quando você escapar dos sinais de adição:

sed 's/\([^ ]\+\) your \([^ ]\+\)/\2\1er/' < fail

Outras dicas

comum ou jardim variedade sed regex não entende +. Sim, eu sei, o quão estúpido é isso. Portanto, esta é uma versão equivalente, trabalhando de sua linha de comando:

sed 's/\([^ ][^ ]*\) your \([^ ][^ ]*\)/ \2\1er/' < fail

Também funciona para solicitar regex prolongada, caso em que você abandonar as barras invertidas nos parênteses:

sed -r 's/([^ ]+) your ([^ ]+)/ \2\1er/' < fail
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top