Este comando casi hace todo lo que necesito
cat /etc/passwd | cut -f6- -d : | sort | uniqpero no puedo averiguar cómo ordenar una cadena específica
Necesito eliminar "/eliminar/esto" de cualquier línea donde ocurra y necesito que las líneas de texto no se dividan en 1 palabra por línea.
El propósito del comando es Listar todos los shells usados por al menos un usuario en el sistema, sin duplicados.
Wold apreciar cualquier entrada.
Puedes usar sed . Cuando el patrón que está buscando contiene / , debe usar un carácter separador diferente. Encuentro : bastante legible.
cat /etc/passwd | cut -f6- -d : | sort | uniq | sed s:/remove/this:: Dado que sed cambiará algunas líneas, es mejor mover sort + uniq al final de la canalización. sort -u combina ambos programas.
cat /etc/passwd | cut -f6- -d : | sed s:/remove/this:: | sort -uPuede usar un solo comando awk para eso:
awk -F: '{sub(/\/remove\/this/, "", $NF);a[$NF]} END{for(i in a){print i}}' /etc/passwd -F: divide la línea por : .
El primer bloque se ejecuta en cada línea de entrada, mientras que sub(/\/remove\/this/, "", $NF) elimina la cadena de la última columna y a[$NF] crea un índice para cada shell que se encuentra en passwd. Obviamente, si el índice ya existe, no se volverá a crear. Al hacerlo, deduplicamos los datos.
Al END de la entrada, iteramos a través de la matriz a e imprimimos cada índice: {for(i in a){print i}}