Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

222
Vistas
Cómo insertar un carácter después del primer byte en una línea en Linux

Tengo un archivo de configuración que indica 1,2,3 que significa colocar un , después del 1er, 2do y 3er byte .

Por ejemplo, mi entrada es

 stackoverflow

entonces quiero hacerlo

 s,t,a,ckoverflow

¿Cómo debo hacerlo con las herramientas de Linux? Siento que se debe usar sed , pero no sé cómo hacerlo.

Editar:

Tengo más de 10 comas para colocar. Y la línea también incluye caracteres de varios bytes.

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

En sed :

 echo stackoverflow | sed 's/./&,/1;s/./&,/3;s/./&,/5'

s/.../.../n reemplaza la n -ésima coincidencia. Después del primer reemplazo, el segundo byte sería ahora la tercera coincidencia y, después de eso, el tercer byte sería ahora el quinto.

O, con grupos de expresiones regulares:

 echo stackoverflow | sed 's/\(.\)\(.\)\(.\)/\1,\2,\3,/'

En expresiones regulares básicas (BRE), \(…\) se usa para agrupar expresiones. Puede hacer referencia al texto que coincidió con el n -ésimo grupo usando \ n , para reutilizar el texto coincidente en el reemplazo, por ejemplo. Entonces, en este caso, tengo tres grupos, cada uno con solo . .

Con GNU sed, puede evitar el \ usando expresiones regulares extendidas (ERE):

 echo stackoverflow | sed -r 's/(.)(.)(.)/\1,\2,\3,/'

Con juegos de caracteres multibyte, intente con la configuración regional C:

 $ echo 'æ ' | LC_ALL=C sed 's/\(.\)\(.\)\(.\)/\1,\2,\3,/' �,�, , $ echo → | LC_ALL=C sed 's/\(.\)\(.\)\(.\)/\1,\2,\3,/' �,�,�,
over 4 years ago · Santiago Trujillo Denunciar

0

IFS=, read -ra arr <<< "$1" rules=() for i in "${arr[@]}"; do rules[$i]=1 done s=stackoverflow for (( i=0; i<${#s}; i++ )); do if (( ${rules[i+1]} )); then printf '%s,' "${s:i:1}" else printf '%s' "${s:i:1}" fi done

Ejemplo de uso:

 $ ./sof 1,2,3 $ s,t,a,ckoverflow $ ./sof 1,2,3,7 $ s,t,a,ckov,erflow
over 4 years ago · Santiago Trujillo Denunciar

0

Esto podría funcionar para usted (GNU sed):

 sed 's/\B/\n/g;s/\n//4g;s/\n/,/g' file

o:

 sed 's/\B/,/;s/\B/,/;s/\B/,/' file
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda