Tengo un archivo csv como ese:
0;test1;description;toto 1;test2;description;tata 2;test3;desc ription;tutu 3;test4;description;teteEn Shell, me gustaría reemplazar toda la línea que no comienza con un número. En este ejemplo, quiero reemplazar \nription por ription
No encuentro la expresión correcta con sed, grep... :(
Quiero este resultado:
0;test1;description;toto 1;test2;description;tata 2;test3;description;tutu 3;test4;description;teteMuchas gracias
EDIT 1: He intentado algo como esto:
LC_ALL=C tr '(\n)[0-9]' ' ' < hotels.csv > test.csvO esto :
sed ':a;N;$!ba;s/\r\n?![0-ç-9]/ /g' hotels.csvPero creo que mi expresión regular está mal y no funciona :(
Con awk esto parece factible:
awk -F ';' '{if (NR>1 && match($1,/^[0-9]+$/)) printf("\n"); printf("%s",$0);} END{printf("\n")}' infile.csvQue hace:
$0 ) sin salto de línea final La salida se envía a STDOUT , la entrada proviene de infile.csv
EDITAR: Lo siento, no pude copiar el partido (...)
Usando grep -P
grep -P "^\d" file.csvUse grep para hacer coincidir las líneas que comienzan con un dígito.
debido a las peculiaridades del procesamiento del espacio de patrones de sed , tendrá que usar algo como esto...
Nota: ~ debe ser un carácter que no esté presente en su texto
$cat file 0;test1;description;toto 1;test2;description;tata 2;test3;desc ription;tutu 3;test4;description;tete $ sed 'N;s/\n/~/' file | sed -r 's/~([0-9])/\n\1/g;s/~//g' 0;test1;description;toto 1;test2;description;tata 2;test3;description;tutu 3;test4;description;tete PD: si su archivo de entrada tiene finales de línea de Windows, deberá usar \r\n en lugar de \n