Englobamento e agrupamento questão em um regex em sed
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?
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