
¿Cómo mover la cadena especificada (comenzando con matemáticas) a una posición específica (columna 20) usando sed (con expresiones regulares)? Quiero mover la cadena que comienza con matemáticas a la columna 20 en cada línea y la cadena matemática siempre está en la última palabra de la línea.
how are you math123
good math234
try this math500
Respuesta1
Si tú realmentedebeuse sed
, entonces un posible algoritmo sería seguir agregando espacios delante de la cadena math
siempre que haya 18 o menos caracteres anteriores:
$ sed -e :a -e 's/\(^.\{,18\}\)math/\1 math/; ta' file
how are you math123
good math234
try this math500
Si desea mover solo la última aparición de la cadena, puede anclarla al final de la línea. Por ejemplo, dado algo como
$ cat file
how are you math123
good math234
try this math500
math101 is enough math
entoncessiempre que no haya espacios en blanco al final
$ sed -e :a -e 's/^\(.\{,18\}\)\(math[^[:space:]]*\)$/\1 \2/; ta' file
how are you math123
good math234
try this math500
math101 is enough math
Si sed
tiene un modo de expresión regular extendido, puede simplificarlo a
sed -E -e :a -e 's/^(.{,18})(math[^[:space:]]*)$/\1 \2/; ta'
Respuesta2
Si bien sed no es bueno en matemáticas, awk sobresale en ellas:
$ awk -Fmath '{printf "%-20smath%s\n",$1,$2}' file
how are you math123
good math234
try this math500
Es posible que este código no maneje correctamente posibles casos extremos, pero lo ayudará a comenzar.
Respuesta3
perl -pe 's/(?=math)/" " x (19-length($`))/e' yourfile
perl -pe 's// / while /.*\K(?=math)/g && 19 > pos' yourfile
Laboral
- La opción Perl
-p
configurará un archivo implícito leído en bucle línea por línea. El registro actual, también conocido como línea, se almacena en$_
una variable. - El
while
bucle está haciendo lo siguiente:- a)
/.*\K(?=math)/g
opera en la línea actual$_
y buscaregex
la posición, donde, justo a su derecha puede estar la cadena "matemáticas" y a su izquierda cualquier cosa.- b) Tras el éxito de la expresión regular, lo siguiente que se verifica es que la posición sea menor que 19. De lo contrario, salga del
while
bucle. - c) El cuerpo del
while
bucle agrega un espacio en la posición determinada en lawhile
declaración de acción del bucle.
- b) Tras el éxito de la expresión regular, lo siguiente que se verifica es que la posición sea menor que 19. De lo contrario, salga del
- a)
Resultados
1 2 3
123456789012345678901234567890
good math234
how are you math123
1234567890
good math234
try this math500
math101 is enough math