Pregunta Cómo reemplazar un personaje en un intervalo delimitado por otros dos caracteres de un archivo


Tengo que reemplazar todas las apariciones del carácter de la barra vertical | con una coma , cuando aparecen entre [ y ] caracteres, en cada línea de un archivo.

Digamos que tengo la siguiente cadena en el archivo:

wah wah| [go great|no great|so great] | wah wah | [go great|no great|so great]

Quiero que mi salida sea como a continuación:

wah wah| [go great,no great,so great] | wah wah | [go great,no great,so great]

Tenga en cuenta que puede haber múltiples [...] pares. Barras verticales entre la primera ] y el segundo [ no debe ser cambiado

¿Cómo puedo lograr esto usando comandos de shell? Intenté varias formas como a continuación, pero nada funcionó.

sed '/[/,/]/s/|/,/g' abcd.csv

0


origen




Respuestas:


Hacer

sed ': loop; s / \ (\ [[^] [] * \) | \ ([^] [] * \] \) / \ 1, \ 2 /; t loop ' fichero de entrada

¿Que pasa?

  • : loop es una etiqueta para el bucle; Lo usaré en un momento.
  • s/\(\[[^][]*\)|\([^][]*\]\)/\1,\2/ reemplaza uno  | esto parece Entre [ y ] con una coma Desglosado:

    s/  \(  \[  [^][]  *  \)  |  \(  [^][]  *  \]  \)  /  \1,\2  /
    
    • \(...\) delimita un grupo de búsqueda y reemplazo. Dado un [...] con un | entre ellos, esto coincide con el [  arriba a

2