Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

236
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!