Lógicamente Imposible search esta cadena en particular.

Tengo 3 cadenas que son aleatorias y se parecen algo a esto

1) ENTL.COMPENSATION REM REVERSE PAYMENT COUPON ON ISIN //IT0004889033 IN A TRIPARTY //TRANSACTION WITH 95724 2) 01P ISIN DE000A1H36U5 QTY 44527000, //C/P 19696 3) COUPON ISIN XS0820547742 QTY 466750, 

Ahora lo que se espera es get los valores IT0004889033 o DE000A1H36U5 o XS0820547742 . Si observas las 3 strings, estos 3 valores esperados se presentarán después del ISIN. Entonces podemos tomar isin como reference y luego search los valores después de ISIN. Pero eso no es lo que se requiere, parece. No deberíamos get el valor tomando algún valor como reference.

Dado que el valor esperado es IT0004889033 que es un carácter de 12 dígitos, la información que tengo es; los primeros 2 caracteres son alfabetos, los siguientes 9 son alfanuméricos y el último es un dígito. Solo con esta información es posible hacer una búsqueda de comodín o algo así y get este valor de 12 dígitos.

Estoy totalmente perdido en esto lógicamente.

Usted mencionó que ISIN no debe usarse como reference. Por lo tanto, lo único seguro es que la cadena que se encuentra comienza con 2 letras, seguidas por 9 letras y / o numbers, y termina con un número.

Guardé el text de ejemplo como tmp y ejecuté el siguiente command egrep … parece funcionar para mí:

 jim@debian:~/tmp$ egrep -o "[a-zA-Z]{2}[a-zA-Z0-9]{9}[0-9]{1}" tmp IT0004889033 DE000A1H36U5 XS0820547742 

La solución anterior es más correcta que las anteriores porque requiere una cantidad fija de caracteres para filtrar los resultados. El código anterior solo devolverá cadenas de 12 caracteres.

¡Espero que esto ayude!

Usando grep -oP :

 grep -oP 'ISIN\W+\K\w+' file IT0004889033 DE000A1H36U5 XS0820547742 

si grep -P no está disponible, entonces puede usar use awk:

 awk -F '.*ISIN[^0-9a-zA-Z]*| ' '{print $2}' file IT0004889033 DE000A1H36U5 XS0820547742 

Si no:

 awk -F '.*ISIN[^[:alnum:]]*| ' '{print $2}' file 
    Intereting Posts