Comandos de Bash en una sola Línea

Aquí tienes una colección de comandos prácticos de Bash en una sola línea de código y otros trucos para la terminal relacionados con el procesamiento de datos y el mantenimiento del sistema Linux.

Con estos comandos de bash en una sola línea vas a poder trabajar mucho más rápido que con aburridos scripts, ahorrando tiempo, aprendiendo atajos de línea de comandos y scripting.

No todos los comandos son exclusivamente de una línea, pero se ha realizado un esfuerzo por configurarlos breves y lo más sencillos posibles para mantener una rápida ejecución.

Estos comandos se han usado principalmente con Ubuntu, Amazon Linux, RedHat, Linux Mint, Mac y CentOS, es posible que estos comandos no funcionan en otros sistemas.

Con los comandos simples de bash vas a poder analizar datos y ejecutar el mantenimiento del sistema Linux. La gran mayoría de comandos fueron extraídos de Google o Stack Overflow, conjunto a repositorios de Github.

¡Claro! Aquí tienes una lista de comandos y explicaciones basados en el archivo que proporcionaste, organizados por categoría para facilitar su consulta:

Trucos de la Terminal

Usando las Teclas Ctrl

  • Ctrl + n: Igual que la flecha abajo.
  • Ctrl + p: Igual que la flecha arriba.
  • Ctrl + r: Inicia una búsqueda hacia atrás en el historial de comandos (mantén pulsado Ctrl + r para retroceder).
  • Ctrl + s: Detiene la salida en la terminal.
  • Ctrl + q: Reanuda la salida en la terminal después de Ctrl + s.
  • Ctrl + a: Mueve el cursor al principio de la línea.
  • Ctrl + e: Mueve el cursor al final de la línea.
  • Ctrl + d: Si has escrito algo, Ctrl + d elimina el carácter bajo el cursor; de lo contrario, escapa del shell actual.
  • Ctrl + k: Elimina todo el texto desde el cursor hasta el final de la línea.
  • Ctrl + x + backspace: Elimina todo el texto desde el principio de la línea hasta el cursor.
  • Ctrl + t: Transpone el carácter anterior al cursor con el que está bajo el cursor; presiona Esc + t para transponer las dos palabras antes del cursor.
  • Ctrl + w: Corta la palabra anterior al cursor; luego Ctrl + y pega la palabra cortada.
  • Ctrl + u: Corta la línea antes del cursor; luego Ctrl + y pega la línea cortada.
  • Ctrl + _: Deshace la escritura.
  • Ctrl + l: Equivalente a clear (limpia la pantalla).
  • Ctrl + x + Ctrl + e: Lanza el editor definido por $EDITOR para introducir tu comando. Útil para comandos de varias líneas.

Cambiar Mayúsculas y Minúsculas

  • Esc + u: Convierte el texto desde el cursor hasta el final de la palabra a mayúsculas.
  • Esc + l: Convierte el texto desde el cursor hasta el final de la palabra a minúsculas.
  • Esc + c: Convierte la letra bajo el cursor a mayúscula, el resto de la palabra a minúscula.

Ejecutar Comandos del Historial

  • !53: Ejecuta el comando con número 53 del historial.
  • !!: Ejecuta el comando anterior.
  • sudo !!: Ejecuta el comando anterior con sudo.
  • ^aaa^bbb: Ejecuta el último comando y cambia la primera ocurrencia de ‘aaa’ por ‘bbb’.
  • ^aaa^bbb^:&: Ejecuta el último comando y reemplaza todas las ocurrencias de ‘aaa’ con ‘bbb’.
  • !!:gs/aaa/bbb/: Ejecuta el último comando y reemplaza globalmente ‘aaa’ con ‘bbb’.
  • !cat: Ejecuta el último comando que comenzó con cat.
  • !c: Ejecuta el último comando que comenzó con c.

Globbing en Bash

  • /etc/pa*wd: Usa * como comodín para expandir nombres de archivo (ej: /etc/passwd).
  • /b?n/?at: Usa ? como comodín para un solo carácter en la expansión de nombres de archivo (ej: /bin/cat).
  • ls -l [a-z]*: Lista todos los archivos con nombres que comienzan con una letra minúscula.
  • ls *.{sh,py}: Lista todos los archivos con extensiones .sh y .py.

Variables de Entorno Útiles

  • $0: Nombre del shell o script de shell.
  • $1, $2, $3, ...: Parámetros posicionales.
  • $#: Número de parámetros posicionales.
  • $?: Código de salida del último comando en primer plano.
  • $-: Opciones actuales establecidas para el shell.
  • $$: PID del shell actual (no subshell).
  • $!: PID del comando más reciente en segundo plano.
  • $DESKTOP_SESSION: Gestor de pantalla actual.
  • $EDITOR: Editor de texto preferido.
  • $LANG: Idioma actual.
  • $PATH: Lista de directorios para buscar archivos ejecutables.
  • $PWD: Directorio actual.
  • $SHELL: Shell actual.
  • $USER: Nombre de usuario actual.
  • $HOSTNAME: Nombre del host actual.

Variables

Sustitución de Variables en Citas

  • echo $foo: Expande la variable $foo.
  • echo "$foo": Expande la variable $foo dentro de comillas dobles.
  • echo '$foo': No expande la variable $foo (literal).
  • echo "'$foo'": Expande la variable $foo y la encierra entre comillas simples.
  • echo ''$foo'': Expande la variable $foo (las comillas simples dobles actúan como comillas dobles).

Manipulación de Variables

  • echo ${#var}: Obtiene la longitud de la variable var.
  • echo "${var:0:1}": Obtiene el primer carácter de la variable var.
  • echo ${var%%"${var#?}"}: Otra forma de obtener el primer carácter de la variable var.
  • echo ${var:2}: Elimina los dos primeros caracteres de la variable var.
  • echo ${var[@]#0}: Elimina el primer ‘0’ inicial de la variable var.
  • {var/a/,}: Reemplaza la primera ocurrencia de ‘a’ con ‘,’.
  • {var//a/,}: Reemplaza todas las ocurrencias de ‘a’ con ‘,’.
  • grep ${test// /\|} file.txt: Usa grep para encontrar líneas en file.txt que contengan cualquiera de las cadenas en la variable test.
  • echo ${var,,}: Convierte la cadena en la variable var a minúsculas.
  • eval "$cmd": Expande y ejecuta el comando almacenado en la variable cmd.

Matemáticas

Expansión Aritmética en Bash

  • echo $(( 10 + 5 )): Realiza una suma.
  • echo $(( x++ )): Post-incremento de la variable x.
  • echo $(( ++x )): Pre-incremento de la variable x.
  • echo $(( x-- )): Post-decremento de la variable x.
  • echo $(( --x )): Pre-decremento de la variable x.
  • echo $(( x ** y )): Calcula x elevado a la potencia de y.

Otros Comandos Matemáticos

  • factor 50: Imprime los factores primos de 50.
  • seq 10|paste -sd+|bc: Suma los números del 1 al 10.
  • awk '{s+=$1} END {print s}' filename: Suma los números en cada línea del archivo.
  • cat file| awk -F 't' 'BEGIN {SUM=0}{SUM+=$3-$2}END{print SUM}': Calcula la diferencia entre la columna 3 y la columna 2 de un archivo.
  • expr 10+20: Realiza una suma con expr.
  • expr 10*20: Realiza una multiplicación con expr.
  • expr 30 > 20: Realiza una comparación con expr.
  • echo "scale=2;2/3" | bc: Divide 2 entre 3 con una escala de 2 decimales usando bc.
  • echo "10^2" | bc: Calcula 10 elevado a la potencia de 2 usando bc.
  • echo "var=5;--var"| bc: Usa variables y decremento en bc.

Grep

Tipos de Grep

  • grep: Igual que grep -G (Basic Regular Expression).
  • fgrep: Igual que grep -F (fixed text, ignorando meta-caracteres).
  • egrep: Igual que grep -E (Extended Regular Expression).
  • pgrep: Igual que grep -P (Perl Compatible Regular Expressions).
  • rgrep: Igual que grep -r (recursivo).

Opciones de Grep

  • grep -c "^$": Cuenta el número de líneas vacías.
  • grep -o '[0-9]*': Extrae solo números enteros.
  • grep -oP 'd*': Extrae solo números enteros (usando PCRE).
  • grep '[0-9]{3}': Busca números con exactamente 3 dígitos.
  • grep -E '[0-9]{3}': Busca números con exactamente 3 dígitos (usando ERE).
  • grep -P 'd{3}': Busca números con exactamente 3 dígitos (usando PCRE).
  • grep -Eo '[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}': Extrae direcciones IP.
  • grep -Po 'd{1,3}.d{1,3}.d{1,3}.d{1,3}': Extrae direcciones IP (usando PCRE).
  • grep -w 'target': Busca la palabra completa ‘target’.
  • grep 'btargetb': Busca la palabra completa ‘target’ (usando RE).
  • grep -A 3 'bbo': Muestra 3 líneas después de la coincidencia de ‘bbo’.
  • grep -B 3 'bbo': Muestra 3 líneas antes de la coincidencia de ‘bbo’.
  • grep -C 3 'bbo': Muestra 3 líneas antes y después de la coincidencia de ‘bbo’.
  • grep -o 'S.*': Extrae cadenas que comienzan con ‘S’.
  • grep -o -P '(? all.json: Concatena archivos JSON, separando cada archivo con una coma.

Sustitución

  • sed 's/A/B/g' filename: Reemplaza todas las ocurrencias de ‘A’ con ‘B’.
  • sed "s/aaa=.*/aaa=/my/new/path/g": Reemplaza líneas que comienzan con “aaa=” con “aaa=/my/new/path”.

Imprimir Rangos de Líneas

  • sed -n '/^@S/p': Imprime líneas que comienzan con ‘@S’.
  • sed '/bbo/d' filename: Elimina líneas que contienen ‘bbo’.
  • sed -n 500,5000p filename: Imprime las líneas 500 a 5000.
  • sed -n '0~3p' filename: Imprime cada tercera línea.
  • sed -n '1~2p': Imprime cada línea impar.
  • sed -n '1p;0~3p': Imprime la primera línea y cada tercera línea después de esa.

Eliminar Espacios en Blanco

  • sed -e 's/^[ t]*//': Elimina espacios en blanco y tabulaciones al principio de la línea.
  • sed 's/ *//': Elimina espacios en blanco al principio de la línea.
  • sed 's/,$//g': Elimina comas al final de la línea.

Añadir Columnas

  • sed "s/$/t$i/": Añade una columna al final de cada línea.
  • for i in $(ls);do sed -i "s/$/t$i/" $i;done: Añade el nombre del archivo como la última columna en cada línea de cada archivo.
  • for i in T000086_1.02.n T000086_1.02.p;do sed "s/$/t${i/*./}/" $i;done >T000086_1.02.np: Añade la extensión del nombre del archivo a la última columna.

Eliminar Nueva Línea

  • sed ':a;N;$!ba;s/n//g': Elimina todas las nuevas líneas en el archivo.

Imprimir una Línea Específica

  • sed -n -e '123p': Imprime la línea 123.
  • sed -n '10,33p' <filename: Imprime las líneas 10 a 33.

Cambiar Delimitador

  • sed 's=/=\/=g': Cambia el delimitador a ‘/’.

Reemplazar con Comodín

  • sed 's/A-.*-e//g' filename: Elimina patrones como “A-1-e” de cada línea.

Insertar Carácter en una Posición Específica

  • sed -r -e 's/^.{3}/&#/: Inserta ‘#’ después de los primeros tres caracteres de cada línea.

Awk

Separador de Campos

  • awk -F $'t': Establece el tabulador como separador de campos.
  • awk -v OFS='t': Establece el tabulador como separador de campos para la salida.

Pasar Variables

  • awk -v a="$a" -v b="$b" "$1==a && $10=b" filename: Pasa las variables a y b a awk y evalúa una condición.

Imprimir Número de Línea y Longitud

  • awk '{print NR,length($0);}' filename: Imprime el número de línea y la longitud de cada línea.

Encontrar Número de Columnas

  • awk '{print NF}': Imprime el número de campos (columnas) en cada línea.

Invertir Orden de Columnas

  • awk '{print $2, $1}': Imprime la segunda columna seguida de la primera.

Comprobar Comas en una Columna

  • awk '$1~/,/ {print}': Imprime líneas donde la primera columna contiene una coma.

Dividir y Hacer Bucle

  • awk '{split($2, a,",");for (i in a) print $1"t"a[i]}' filename: Divide la segunda columna por comas y imprime cada elemento con la primera columna.

Imprimir Líneas Antes de la Enésima Ocurrencia

  • awk -v N=7 '{print}/bbo/&& --N<=0 {exit}': Imprime líneas hasta que ‘bbo’ aparezca 7 veces.

Imprimir Nombre de Archivo y Última Línea

  • ls|xargs -n1 -I file awk '{s=$0};END{print FILENAME,s}' file: Imprime el nombre del archivo y la última línea de cada archivo.

Añadir Cadena al Principio de una Columna

  • awk 'BEGIN{OFS="t"}$3="chr"$3': Añade “chr” al principio de la tercera columna.

Eliminar Líneas con una Cadena

  • awk '!/bbo/' file: Imprime líneas que no contienen ‘bbo’.

Eliminar la Última Columna

  • awk 'NF{NF-=1};1' file: Elimina la última columna de cada línea.

Uso de NR y FNR

  • awk 'print FILENAME, NR,FNR,$0' fileA fileB: Muestra el uso de las variables NR (número de registro global) y FNR (número de registro por archivo).

Compuerta AND

  • awk -v OFS='t' 'NR=FNR{a[$1]=$2;next} NF {print $1,((a[$1]=$2)? $2:"0")}' fileA fileB: Implementa una compuerta AND entre dos archivos.