Con cierto retraso retomo mi traspaso de apuntes del curso de LPI1 al blog. Mejor tarde que nunca. Es hora de comenzar a estudiar! En este post me entretengo con el grep y el vi.
Grep
Grep busca en los archivos indicados las líneas que contengan el texto que buscamos. Cuando encuentra una línea con el texto, la copia a la sálida estándar (por defecto) o cualquiera otro tipo de salida que hayas configurado con opciones.
grep [-modificador] patron archivo
Ejemplo:
Buscamos el string “root” en el fichero /etc/passwd
# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
Buscamos el string “root” en el fichero /etc/passwd y que nos muestre el número de línea
# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
12:operator:x:11:0:operator:/root:/sbin/nologin
Buscamos en el mismo fichero cualquier línea que no incluya el string “root” y a su vez, con la pipe descartamos del primer resultado todos aquellos que tengan el string “nologin”
# grep -v root /etc/passwd | grep -v nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
news:x:9:13:news:/etc/news:
Nos muestra la cantidad de veces que ha encontrado un resultado válido
# grep -c root /etc/passwd
2
Expresiones regulares (que no reguleras :P)
Buscamos las líneas que comienzen por el string root
# grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
Buscamos a un usuario que no tiene shell asignado
# grep :$ /etc/passwd
news:x:9:13:news:/etc/news:
Clases de carácteres
Buscamos una línea que contenga cualquiera de los carácteres f,y
# grep [yf] /etc/group
sys:x:3:root,bin,adm
tty:x:5:
ftp:x:50:
nobody:x:99:
floppy:x:19:
Buscamos una palabra que empiece por r y acabe por t y contenga dos carácteres
# grep '\' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
–color=auto es útil para resaltar las resultados encontrados
# grep --color=auto '\' /etc/passwd
Expresiones regulares
. cualquier carácter
* cualquier número de apariciones
+ una o más apariciones
? de 0 a 1 aparaciones
{a,b} entre ‘a’ y ‘b’ apariciones
{a} a apariciones
{,b} 0 y b apariciones
[abc] carácter a,b,c
[a-z] carácter de la ‘a’ a la ‘z’
$ final de línea
^ inicio
Parámetros
-i case insensitive, tanto maýusculas como minúsculas
-v busca lo contrario
-n muestra el número de línea
-r recursivo
Vi
# vi texto.txt
Tiene dos modos de trabajo, comandos y insertar. Para pasar a modo insertar, tecleamos ‘i’, para volver a modo comandos, ‘Esc’. Las formas de entrar en el modo edición son:
- i: la forma de entrar más común, deja el cursor en la posición actual. Cualquier tecleo empuja las letras a partir del cursor a la derecha.
- I: la i mayúscula hace lo mismo pero deja el curso al inicio de la línea actual
- a: la letra a hace lo mismo que la i, sólo que desplaza el cursor un carácter a la derecha
- A: la a mayúscula, se mueve al final de la línea actual y luego actua como si pulsaramos a
- o: abre una nueva línea debajo de la línea actual. Si estamos en la línea 3, y picamos o, mueve la 4 una línea abajo conviertiéndola en 5 y deja una nueva línea 4.
- O: abre una línea nueva en la línea actual. Si estamos en la 3, la 3 se convierte en 4 y tenemos una nueva línea 3.
H,J,K,L hacen de teclas de dirección
‘x’ borra letra
‘x’ + SHIFT borra letra anterior
‘0’ inicio de línea
‘W’ palabra sigiuente
‘B’ palabra anterior
Borrar
d+c = caracter
d+w = palabra
d+d = linea
Copiar
y+c = caracter
y+w = palabra
y+d = linea
Pegar
d+c = caracter
d+w = palabra
d+d = linea
w, guardar.
wq guardar y salir
w! fuerza guardar
q salir
q! salir sin guardar
Modo Insertar
i carácter actual
I inicio de línea
a carácter actual
A final de línea
o abre una línea nueva antes de la actual
O abre una línea nueva después de la actual
Buscar
tecleamos / y el texto a buscar
n busca siguiente
N busca anterior
Reemplazar
Rangos / cadena_original /sustituto /flags
:%s sustituye todo el documento
Normalmente se puede añadir un número delante
:10x, :10dd, etc
Split
:split, trocea la ventana en dos partes.
:vsplit trocea verticalmente
CTRL+W+(teclas dirección) para moverse entre ventanas
Ejecutar comando y muestra output
:![comando]
Ayuda
:help
Links: