Soy nuevo en Sed, estoy tratando de aprender algunos patrones usando Sed. Tengo un filenamne.txt que tiene la siguiente entrada:

ppp / jjj qqq / kkk rrr / lll

Mi objetivo es intercambiar la palabra antes de la barra y la palabra después de la barra en cada una de las tres columnas word1 / word2 :

jjj / ppp kkk / qqq lll / rrr

Intenté usar sed –re ‘s!(.*)(/)(.*)!\1\2\!’ filename.txt, pero no funcionó. ¿Alguna idea de cómo puedo hacerlo?

-1
McKenzie 23 dic. 2016 a las 19:21

3 respuestas

La mejor respuesta
$ echo "ppp/jjj qqq/kkk rrr/lll" | sed -e 's/$/ /' -e 's!\([^/]*\)/\([^ ]*\) !\2/\1 !g'
jjj/ppp kkk/qqq lll/rrr 
1
Ipor Sircer 23 dic. 2016 a las 16:32
$ sed 's#\([^ ]*\)/\([^ ]*\)#\2/\1#g' file
jjj/ppp kkk/qqq lll/rrr
0
Ed Morton 25 dic. 2016 a las 01:11

El reemplazo de uso en la línea de comandos perl es mucho más sencillo: -

perl -pe 's/(\w+)\/(\w+)/$2\/$1/g' file
jjj/ppp kkk/qqq lll/rrr
1
Inian 23 dic. 2016 a las 16:58