Reemplace 64 cadenas diferentes con 64 nuevas cuerdas nuevas -- bash campo con sed camp askubuntu Relacionados El problema

replace 64 different OLD strings with 64 different new strings


0
vote

problema

Español

Tengo un archivo que tiene contenido en el siguiente formato:

  wwid 525a9370dcb2348b03884049000190l   

El segundo campo es diferente en cada línea. Necesito reemplazar 64 de estas líneas con 64 nuevas cadenas diferentes.

Tengo este script, y cambia el segundo campo, sin embargo, cambia correctamente la línea correspondiente correctamente, pero deja las líneas restantes sin cambios, sigue haciendo esto hasta que lea el final del archivo. Así que parece un problema de bucle.

¿Alguna idea? Aquí está el guión:

  while read line     do sed  -e "0,/wwid/ s/wwid .*$/wwid "${line}"/" oldluns done < newluns   
Original en ingles

I have a file that has content in the following format:

wwid 525a9370dcb2348b03884049000190l 

The 2nd field is different on each line I need to replace 64 of these lines with 64 new different strings.

I have this script - and it does change the 2nd field - however, it changes the 1st matched line correctly - but leaves the remaining lines unchanged - it keeps doing this until it reads the end of the file. So it looks like a loop issue.

Any ideas? Here is the script:

while read line     do sed  -e "0,/wwid/ s/wwid .*$/wwid "${line}"/" oldluns done < newluns 
     
         
         

Lista de respuestas

0
 
vote
vote
La mejor respuesta
 

El enfoque de su bucle SED solo va a funcionar si el texto de reemplazo no coincide con el patrón original (de lo contrario, abcdefghijklmnchmod a+x /path/to/scriptname4 va a igualar la instancia que ya reemplazó). Por ejemplo, usted podría hacer

  chmod a+x /path/to/scriptname5  

y luego post-proceso El resultado con otro SED para cambiar chmod a+x /path/to/scriptname6 Volver a chmod a+x /path/to/scriptname7 . Obviamente, debe elegir una cadena que no se encuentra en otra parte del archivo.

( nb Lamentablemente, esto no se puede probar sin el chmod a+x /path/to/scriptname8 , por la misma razón: asegúrese de tener copias de seguridad adecuadas del chmod a+x /path/to/scriptname9 archivo.)

Una mejor manera podría ser usar /path/to/scriptname0 e.g.

  /path/to/scriptname1  
 

Your sed loop approach is only going to work if the replacement text doesn't match the original pattern (otherwise 0,/wwid/ is going to match the instance you already replaced). For example, you could do

while read line     do sed -i -e "0,/wwid/ s/wwid .*$/WWID "${line}"/" oldluns done < newluns 

and then post-process the result with another sed to change WWID back to wwid. Obviously you should choose a string that's not found elsewhere in the file.

(NB unfortunately this can't be tested without the -i, for the same reason - make sure you have suitable backups of the oldluns file.)

A better way might be to use awk e.g.

awk -vnewluns="newluns" '$1 == "wwid" {getline $2 < newluns} 1' oldluns 
 
 
 
 

Relacionados problema

2  ¿Cómo eliminar programáticamente las nuevas líneas vacías de un archivo?  ( How to programatically remove empty new lines from a file ) 
Necesito eliminar las nuevas líneas vacías del archivo de texto en el terminal. archivo de ejemplo 123 123 123 123 123 123 He buscado en Google u...

4  Retire las cotizaciones alrededor de los enteros en un archivo CSV  ( Remove quotes around integers in a csv file ) 
en un archivo CSV grande (& gt; 1 gb) Tengo algo como "34432", "name", "0", "very long description" pero en lugar de eso me gustaría tener 34432, "n...

4  Cómo encontrar texto y reemplazar esa línea si existe con terminal, de lo contrario, solo agrega la línea para terminar  ( How to find text and replace that line if exists with terminal otherwise just ap ) 
Quiero poner en sudo gedit /etc/sysctl.conf la línea vm.swappiness=10 que a veces cambia. De forma predeterminada, esta línea no existe, por lo que util...

1  El uso de SED para agregar caracteres al final de una línea agrega una nueva línea  ( Using sed to add characters at the end of a line adds a new line ) 
Estoy haciendo un script para convertir algunas listas de cubierta mágicas de un formato a otro. Necesito insertar el código de configuración para cada tarjet...

15  Regex con comando SED para analizar el texto JSON  ( Regex with sed command to parse json text ) 
Tengo este texto JSON: { "buildStatus" : { "status" : "ERROR", "conditions" : [{ "status" : "OK", "metr...

3  Eliminar todo antes de la primera ocurrencia de la palabra especificada  ( Remove everything before first occurence of specified word ) 
¿Cómo puedo eliminar todo antes de la primera ocurrencia de una palabra específica usando sed ? lo que he intentado hasta ahora: echo $(cat /etc/nginx/s...

0  ¿Cómo usar el comando SED para buscar la cadena con "/" personaje en él y reemplazar con alguna otra cadena?  ( How to use of sed command to search string with character in it and replace ) 
He ejecutado el comando: ABCDEFGHIJKLMNABCDEFGHIJKLMN5 En la salida, este comando no reemplaza "http: //" con "www" ¿Por qué? ¿Y cómo cambiar delimita...

7  ¿Cómo reemplazar las cadenas en el archivo sin regex?  ( How to replace strings in file without regex ) 
Necesito reemplazar algunas cadenas en archivos (desde la línea de comandos), pero no quiero usar sed -i porque mi cadena contiene muchos personajes diverti...

1  Reemplace solo ciertos números usando SED [CERRADO]  ( Replace only certain numbers using sed ) 
cerrado . Esta pregunta necesita detalles o claridad . Actualmente no está aceptando respuestas. ...

1  SED / AWK - Retire todas las etiquetas, excepto solo dos etiquetas y textos lisos  ( Sed awk remove all tags except only two tags and plain texts ) 
Aquí hay una muestra para mi archivo de texto: <w:r><w:t> <w:r w:rsidR="00D171FD"> <w:t></w:t> </w:r><w:r> <w:t xml:space="preserve"> This is a sample text...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos