es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sustitución múltiple

Deseo usar sed para hacer múltiples sustituciones que se encuentran en un archivo names.txt dentro de un archivo JSON:

Parte del archivo JSON contiene:

{
    "iscomplete": true,
    "totalcount": 3,
    "errcount": 1,
    "requser": "Username",
    "fileimportreqqueueid": 3,
    "format": "JSON",
    "errorfile": "http://host:port/maximo/api/fileimporterrfile/3",
    "_rowstamp": "1521573",
    "iscancelled": false,
    "reqdatetime": "2019-02-20T14:08:22-05:00",
    "name": "jason.brady@doom.com",
    "href": "http://host:port/maximo/api/os/mxapifileimportqueue/_dGVzdGxvYzMuanNvbg--",
    "pindex": 3,
    "osname": "MXAPIOPERLOC"
}

y parte del archivo names.txt:

jason.brady@doom.com    Jason.Brady
linda.ribson@doom.com   L.Robson
Mike.graham@doom.com    Mikegraham
Phill.Lewis@doom.com    Phil.Lewis
Liam.Haggard@doom.com   LiamH
James.birch@doom.com    James.Birch

Intenté lo siguiente:

#!/bin/bash

while read f; do

    email=`echo $f |awk '{print $1}'`
    username=`echo $f|awk '{print $2}'`

    sed -i 's!$email!$username!g' file.csv

done<names.txt

¿cómo puedo hacerlo?

gracias. ="" ¿cómo="" puedo="" hacerlo?=""></names.txt

¿cómo puedo hacerlo?

gracias.>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para realizar múltiples sustituciones utilizando sed en un archivo JSON basado en una lista de nombres contenida en un archivo separado:

    #!/bin/bash
    
    # leer cada línea del archivo de nombres
    while read -r line; do
      # extraer el correo electrónico y nombre de usuario de la línea
      email=$(echo "$line" | cut -d " " -f 1)
      username=$(echo "$line" | cut -d " " -f 2)
    
      # realizar la sustitución utilizando sed
      # utilizar un delimitador diferente (por ejemplo, @) en lugar de ! para evitar conflictos con las URL
      sed -i "s@$email@$username@g" file.json
    
    done < names.txt
    

    Este script lee cada línea del archivo de nombres, extrae el correo electrónico y el nombre de usuario utilizando cut, y luego utiliza sed para sustituir todas las apariciones del correo electrónico por el nombre de usuario en el archivo JSON. Es importante utilizar un delimitador diferente para el comando de sustitución para evitar conflictos con las URL u otro contenido en el archivo JSON.

    Ten en cuenta que este script asume que cada línea del archivo de nombres contiene solo un correo electrónico y un nombre de usuario correspondiente. Si hay múltiples columnas o separadores en el archivo de nombres, es posible que debas ajustar los comandos cut en consecuencia.

Comments are closed.