Diferencia entre revisiones de «Ejercicios de sed»
Línea 48: | Línea 48: | ||
$ cat /etc/passwd | sed 's/^\([A-Za-z0-9]\+\):[^:]*:[^:]*:[^:]*:[^:]*:\(.*\):.*/\2 \1/g' | $ cat /etc/passwd | sed 's/^\([A-Za-z0-9]\+\):[^:]*:[^:]*:[^:]*:[^:]*:\(.*\):.*/\2 \1/g' | ||
$ cat /etc/passwd | cut -d":" -f1,6 | sed 's/\(.*\):\(.*\)/\2 \1/' | $ cat /etc/passwd | cut -d":" -f1,6 | sed 's/\(.*\):\(.*\)/\2 \1/' | ||
7- | |||
$ sed -r 's/^([^,]+)[^0-9]+([0-9]+).*$/\1 \2/' ej1 | |||
== Ejercicios de limitar sed a ciertas líneas == | == Ejercicios de limitar sed a ciertas líneas == |
Revisión del 16:22 2 may 2013
Estos ejercicios complementan al artículo principal de sed
Ejercicios de sustitución
Enunciados
1- Modifica la IP de un ordenador por la dirección de la red. (por ejemplo de 192.168.3.5 a 192.168.3.0)
2- Cambia del PATH, el /usr/bin por /home/lliurex/bin
3- Pon una palabra determinada entre comillas
4- Pon una coma entre la primera palabra y las demás de una línea:
5- Convierte 123456789abc en una dirección MAC
6- De todas las líneas de /etc/passwd, muestra el directorio home y luego el nombre
7- Tenemos un fichero como este:
Martínez Pérez, P. (1995). Sed o no sed. García Gómez, R. (2010). Instalar Linux y tener sed. Smith, M., & Doe, J. (1989). First steps with sed.
Queremos tener una salida como esta:
Martínez Pérez 1995 García Gómez 2010 Smith 1989
Soluciones
1- Modifica la IP de un ordenador por la dirección de la red. (por ejemplo de 192.168.3.5 a 192.168.3.0)
$ echo 192.168.0.5 | sed 's/.[0-9]\+$/.0/'
2- Cambia del PATH, el /usr/bin por /home/lliurex/bin
$ echo $PATH | sed 's_/usr/bin_/home/lliurex/bin_'
3- Pon una palabra determinada entre comillas
$ echo 'El so Windows' | sed 's/so/"&"/'
4- Pon una coma entre la primera palabra y las demás de una línea:
$ echo pienso luego existo | sed 's/[a-z]\+/&,/'
5- Convierte 123456789abc en una dirección MAC
$ echo 123456789abc | sed -e 's/../&:/g' -e 's/:$//'
6- De todas las líneas de /etc/passwd, muestra el directorio home y luego el nombre
$ cat /etc/passwd | sed 's/^\([A-Za-z0-9]\+\):[^:]*:[^:]*:[^:]*:[^:]*:\(.*\):.*/\2 \1/g' $ cat /etc/passwd | cut -d":" -f1,6 | sed 's/\(.*\):\(.*\)/\2 \1/'
7-
$ sed -r 's/^([^,]+)[^0-9]+([0-9]+).*$/\1 \2/' ej1
Ejercicios de limitar sed a ciertas líneas
Enunciados
1- Elimina el head de un html
2- Quita las últimas 5 líneas a un documento
Soluciones
1- Elimina el head de un html
cat index.html | sed -e 's/<head>/\n<head>\n/g' -e 's_</head>_\n</head>\n_g' | sed '/<head>/,/<\/head>/ d' Primero añade un salto de línea a cada head para evitar eliminar otras etiquetas, luego borra entre dos expresiones regulares
2- Quita las últimas 5 líneas a un documento
lineas=$(cat index.html | wc -l) cat -n index.html | sed "$(($lineas-5)),$ d"
Ejercicios de agrupar con { }
Enunciados
1- Del head de un html, añade en los enlaces el prefijo "tema/", por ejemplo: href="estilos.css" sería href="tema/estilos.css"
2- En el fichero /etc/passwd, sobre tu usuario, añade /net/usuarios a tu home, cambia el bash por sh y haz que tu grupo sea el 1002
3- Haz ifconfig y se lo pasas por pipe al sed, sobre la tarjeta eth0, modifica su IP a 192.168.100.100 y cambia, en su MAC, los 0 por 1.
4- Imprime del fichero de /var/log/syslog los logs relacionados con la Ip principal
Soluciones
1- Del head de un html, añade en los enlaces el prefijo "tema/", por ejemplo: href="estilos.css" sería href="tema/estilos.css"
cat index.html | sed '/<head>/,/<\/head>/ { s_\(href="\)\(.*\.[a-z]*\)_\1tema\/\2_g }'
2- En el fichero /etc/passwd, sobre tu usuario, añade /net/usuarios a tu home, cambia el bash por sh y haz que tu grupo sea el 1002
cat /etc/passwd | sed '/lliurex/ { s_\(/home\)_/net/usuarios\1 _ s/bash/sh/ s/\(lliurex:x:[0-9]*:\)[0-9]*/\11002/ }'
# otra solución para el home cat /etc/passwd | sed '/lliurex/ { s_\/home_/net/usuarios& _ s/bash/sh/ s/\(lliurex:x:[0-9]*:\)[0-9]*/\11002/ }'
3- Haz ifconfig y se lo pasas por pipe al sed, sobre la tarjeta eth0, modifica su IP a 192.168.100.100 y cambia, en su MAC, los 0 por 1.
ifconfig | sed '/eth0/,/^$/ { s/\(inet:\)[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*/\1192.168.100.100/ /HW/ { s/0/1/g } }'
4- Imprime del fichero de /var/log/syslog los logs relacionados con la Ip principal
cat /var/log/syslog | sed -n '/Apr 19/ { /10.20.2/p}'
Ejercicios de añadir o cambiar líneas
Enunciados
1- En el /etc/network/interfaces, sustituye una ip por dhcp por una estática.
2- En un html, añade un <div id="footer"></div> antes del </body>
3- Añade dos líneas con tu información, licencia y demás a un script después del #!/bin/<el shell que sea>
Soluciones
1- En el /etc/network/interfaces, sustituye una ip por dhcp por una estática.
cat /etc/network/interfaces | sed '/dhcp/ { s/dhcp/static/ a\ address 192.168.0.2 \ netmask 255.255.255.0 }'
2- En un html, añade un <div id="footer"></div> antes del </body>
cat index.html | sed '/<\/body>/ i\ <div id="footer"> \ </div>'
3- Añade dos líneas con tu información, licencia y demás a un script después del #!/bin/<el shell que sea>
cat script.sh | sed '/\#!\/bin\// a\ #Jose Castillo \ #Licencia GNU etc...'
Ejercicios Varios
Enunciados
1. Haz un nuevo fichero llamado 1.sed que tenga sólo las líneas 1,2,3,4,5 del fichero de entrada.
2. Haz un nuevo fichero llamado 2.sed que tenga solo las líneas 9,12,14 del fichero de entrada.
3. Muestra las líneas que contengan la palabra "linea" del fichero original.
4. Muestra las líneas que contienen caracteres numéricos.
5. Muestra las líneas que contienen todas las líneas del fichero original, pero se debe sustituir las palabra "linea" por "entrada", asegurate que también se cambia Linea por Entrada.
6. Muestra las líneas que no contienen caracteres numéricos.
7. Muestra el fichero de entrada que reemplace cualquier carácter numérico con una línea de tres X.
8. Muestra el fichero de manera que añada una nueva línea detrás de cada línea que tenga caracteres numéricos.
9. Pon en mayúscula la primera letra de cada línea
Soluciones
1. Haz un nuevo fichero llamado 1.sed que tenga sólo las líneas 1,2,3,4,5 del fichero de entrada.
sed -n '1,5 p' > 1.sed
2. Haz un nuevo fichero llamado 2.sed que tenga solo las líneas 9,12,14 del fichero de entrada.
sed -n -e '9 p' -e '12 p' -e '14 p' > 2.sed
3. Muestra las líneas que contengan la palabra "linea" del fichero original.
sed -n '/linea/ p'
4. Muestra las líneas que contienen caracteres numéricos.
sed -n '/[0-9]/ p'
5. Muestra las líneas que contienen todas las líneas del fichero original, pero se debe sustituir las palabra "linea" por "entrada", asegurate que también se cambia Linea por Entrada.
sed 's/linea/entrada/g s/Linea/Entrada/g'
6. Muestra las líneas que no contienen caracteres numéricos.
sed -n '/[0-9]/! p'
7. Muestra el fichero de entrada que reemplace cualquier carácter numérico con una línea de tres X.
sed 's/[0-9]/XXX/g'
8. Muestra el fichero de manera que añada una nueva línea detrás de cada línea que tenga caracteres numéricos.
sed '/[0-9]/ a\ '
9. Pon en mayúscula la primera letra de cada línea
sed 's/^./\u&/'