Linux LPI – Apuntes IV

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:

Leave a Reply

Your email address will not be published. Required fields are marked *