$ cat columns.test 11111 22222 33333 44444 55555 111 22 33 4444 5555 11111 22222 33333 44444 55555 11 22 3 444 5555La parte mas complicada es preservar el sangrado. El truco reside, en parte, en el patrón central 2, que memoriza los blancos después de la primera columna y un sólo blanco antes de la última.
$ cat columns.sed s/^\( *[0-9][0-9]*\)\( .*[0-9] \)\( *[0-9][0-9]*\)$/\3\2\1/ $ sed -f columns.sed columns.test 55555 22222 33333 44444 11111 5555 22 33 4444 111 55555 22222 33333 44444 11111 5555 22 3 444 11El siguiente ejemplo utiliza una opción del operador de sustitución que permite decidir que aparición del patrón deseamos sustituir. Asi,
s/A/B/3
sustituirá la 3 aparición de A
por B
, obviando las otras.
El ejemplo selecciona la columna dos del fichero:
$ cat col2.sed #extracts the second column s/^ *// s/\<[0-9][0-9]*\>//1 s/\<[0-9][0-9]*\>//2 s/\<[0-9][0-9]*\>//2 s/\<[0-9][0-9]*\>//2 s/ *$// $ sed -f col2.sed columns.test 22222 22 22222 22Mas general que el anterior, el siguiente ejemplo elimina un número de columnas arbitrario
$1
por la izquierda y otro
número $2
por la derecha.
Para lograrlo, es necesario utilizar un un guión para la shell
que llama al correspondiente guión sed
. Los parámetros
son introducidos en el guión sed
mediante el uso apropiado
de las comillas dobles y simples:
> cat colbranch.sh #!/bin/bash sed -e ' s/^\( *[0-9]\+\)\{'"$1"'\}// s/\( *[0-9]\+\)\{'"$2"'\}$// 'Veamos un ejemplo de uso:
> cat columns.test 11111 22222 33333 44444 55555 111 22 33 4444 5555 11111 22222 33333 44444 55555 11 22 3 444 5555 > colbranch.sh 2 1 < columns.test 33333 44444 33 4444 33333 44444 3 444