Redirección
Antes de que podamos hablar sobre sed
, awk
y grep
, necesitamos hablar sobre algo un poco más básico: la redirección de la línea de comandos. Nuevamente, vamos a mantener esto muy simple:
Operador | Función | Ejemplo |
; | Procese el comando de la derecha una vez que haya terminado de procesar el comando de la izquierda. | echo one ; echo two |
> | Coloque la salida de la cosa a la izquierda en el archivo vacío nombrado a la derecha. | ls /home/me > myfilesonce.txt ; ls /home/me > myfilesonce.txt |
>> | Agregue la salida de la cosa a la izquierda al final del archivo existente a la derecha. | ls /home/me > myfilestwice.txt ; ls /home/me >> myfilestwice.txt |
< | Utilice el archivo de la derecha como entrada estándar del comando de la izquierda. | cat < sourcefile > targetfile |
| | Canalice la salida estándar de la cosa de la izquierda a la entrada estándar de la cosa de la derecha. | echo “test123” | mail -s “subjectline” emailaddress |
Comprender estos operadores de redireccionamiento es crucial para comprender los tipos de líneas de comando mágicas que presumiblemente está aquí para aprender. Permiten tratar las utilidades individuales y simples como parte de un todo mayor.
¡Y ese último concepto, dividir una tarea compleja en varias tareas más simples, es igualmente necesario para aprender a pensar en invocaciones complejas de línea de comandos en primer lugar!
Busca “cadenas/strings” con Grep
grep
es la herramienta que se utiliza para buscar líneas que contienen un string
en particular .
Por ejemplo, supongamos que está interesado en encontrar qué puertos tiene abiertos el navegador web apache
en su sistema. Muchas empresas de servicios públicos pueden lograr este objetivo; netstat
es una de las opciones más antiguas y conocidas. Normalmente, invocamos netstat
usando los argumentos: -anp
para all
sockets, numeric
visualización y visualización de la propiedad pid
de cada socket.
Desafortunadamente, esto produce una gran cantidad de resultados, con frecuencia, varias decenas de páginas. Podría simplemente canalizar toda esa salida para que pueda leerla una página a la vez, con netstat -anp | less
. O, en su lugar puede redirigir a un archivo que se abrirá con un editor de texto: netstat -anp > netstat.txt
.
Pero hay una mejor opción. En su lugar, podemos usar grep
para devolver solo las líneas que realmente queremos. En este caso, lo que queremos saber es el servidor web apache
. Entonces:
Introdujimos algunos comandos nuevos arriba:, head
que limita la salida a las primeras n líneas y luego la trunca. También está wc
, que, con el argumento -l
, le dice cuántas líneas de texto llegan a su entrada estándar.
Entonces podemos traducir los cuatro comandos anteriores a un inglés simple:
sudo netstat -anp | head -n5
: “Busque todos los sockets de red abiertos, pero que limite la salida a las primeras cinco líneas”.sudo netstat -anp | wc -l
: “Encuentra todos los sockets de red abiertos, luego dime cuántas líneas de texto en total hay”.sudo netstat -anp | grep apache
: “Encuentra todos los sockets de red abiertos, pero solo muéstrame los resultados que incluyan la palabra ‘apache'”.sudo netstat -anp | head -n2 ; sudo netstat -anp | grep apache
: “Encuentra todos los sockets de red abiertos, pero muéstrame solo las dos líneas de encabezado, luego hazlo de nuevo, pero muéstrame solo los resultados de ‘apache'”.
Una vez que se sienta cómodo con el uso del comando grep
para encontrar cadenas simples como se vio anteriormente, puede realizar tareas mucho más complejas. Estos incluyen, pero no se limitan a: no distingue entre mayúsculas y minúsculas, patrones más complejos (incluidas las expresiones regulares completas), exclusión (muéstrame solo las líneas que no incluyen el patrón) y mucho, mucho más. Pero no se preocupe por eso hasta después de que esté familiarizado con simples grep
usos. Una vez que comienzas, ¡es realmente difícil imaginar la vida sin grep
más!
Sed reemplaza “cadenas/strings”
Ahora que sabe cómo limitar la salida a líneas coincidentes (o no coincidentes), el siguiente paso es aprender a cambiar esa salida sobre la marcha. Para ello, sed
Stream EDitor será su herramienta preferida.
Para usarlo sed
, debe comprender al menos un poco acerca de las expresiones regulares (regexes). Una vez más, vamos a ignorar la gran mayoría de lo que pueden hacer las expresiones regulares y nos centraremos en lo más inmediato e intuitivo y útil: el simple reemplazo de patrones.
Digamos que desea cambiar todas las instancias de dog
a snake
en un montón de texto: