Por favor, acepte mis disculpas, si esta pregunta fue hecha antes. Soy nuevo y no se como hacerlo. Tengo un archivo que contiene los datos como este:
name=1|surname=2|phone=3|email=4 phone=5|surname=6|name=7|email=8 surname=9|phone=10|email=11|name=12 phone=13|email=14|name=15|surname=6Me gustaría tener un archivo como este:
name=1 name=7 name=12 name=15¡Gracias por adelantado!
Di que names.txt es tu archivo, luego usa algo como:
cat names.txt | tr "|" "\n" | grep "^name="tr transforma | a nuevas líneasgrep para las lineas con nombreY aquí hay una solución de un solo comando con GNU awk:
awk -v RS="[|\n]" '/^name=/' names.txt-v RS="[|\n]' set the record separatro to |` o nueva línea/^name=/ para registros que comienzan con name= (y los imprime implícitamente)Iría por la solución de @Lars, pero quería probar esto con "lookbehind". Con grep puede obtener las coincidencias solo con grep -o , pero la siguiente línea también encontrará el apellido:
grep -o "name=[0-9]*" names.txt Puede arreglar esto un poco buscando el carácter antes del nombre (comienzo de línea con ^ o | ).
grep -o "(^|\|)name=[0-9]*" names.txt ¡Qué arreglo! Ahora obtienes los nombres correctos, pero a veces con un extra | .
Con \K (y la opción grep -P) puede decirle a grep que use algo para la coincidencia pero omitirlo durante la salida.
grep -oP "(^|\|)\Kname=[0-9]*" names.txt