Tengo un nombre de archivo abc.lst. He almacenado que en una variable contiene una cadena de 3 palabras, entre ellas quiero grep segunda palabra y en eso quiero cortar la palabra de expdp a .dmp y almacenarla en variable

ejemplo: -

REFLIST_OP=/tmp/abc.lst 
cat $REFLIST_OP      
34 /data/abc/GOon/expdp_TEST_P119_*_18112017.dmp       12-JAN-18 04.27.00 AM

Salida deseada: -

expdp_TEST_P119_*_18112017.dmp

He intentado debajo del comando: -

     FULL_DMP_NAME=`cat $REFLIST_OP|grep /orabackup|awk '{print $2}'`

     echo $FULL_DMP_NAME

    /data/abc/GOon/expdp_TEST_P119_*_18112017.dmp
2
Abhinav 15 ene. 2018 a las 13:08

3 respuestas

La mejor respuesta
REFLIST_OP=/tmp/abc.lst
awk '{n=split($2,arr,/\//); print arr[n]}' "$REFLIST_OP" 

Resultados de la prueba:

$ REFLIST_OP=/tmp/abc.lst
$ cat "$REFLIST_OP"
34 /data/abc/GOon/expdp_TEST_P119_*_18112017.dmp       12-JAN-18 04.27.00 AM
$ awk '{n=split($2,arr,/\//); print arr[n]}' "$REFLIST_OP" 
expdp_TEST_P119_*_18112017.dmp

Para guardar en variable

myvar=$( awk '{n=split($2,arr,/\//); print arr[n]}' "$REFLIST_OP" )
1
Akshay Hegde 15 ene. 2018 a las 10:26

Seguir awk puede ayudarte en la misma.

awk -F'/| ' '{print $6}'   Input_file

O

awk -F'/| ' '{print $6}' "$REFLIST_OP"

Explicación : Simplemente haciendo espacio y / como un separador de campo (según su Input_file mostrado) y luego imprimiendo el sexto campo de la línea que requiere OP. Para ver el número y el valor del campo, también puede usar el siguiente comando:

awk -F'/| ' '{for(i=1;i<=NF;i++){print i,$i}}' "$REFLIST_OP"
1
RavinderSingh13 15 ene. 2018 a las 10:27

Usando sed con uno de estos regex

sed -e 's/.*\/\([^[:space:]]*\).*/\1/' abc.lst captura caracteres no espaciales después de /, imprimiendo solo la parte capturada.

sed -re 's|.*/([^[:space:]]*).*|\1|' abc.lst Igual que el anterior, pero usando un separador diferente, evitando así escapar del /. -r para usar sin escapes (

sed -e 's|.*/||' -e 's|[[:space:]].*||' abc.lst en dos pasos, elimine hasta el último /, elimine del espacio hasta el final. (Puede ser más fácil de leer / entender)

myvar=$(<abc.lst); myvar=${myvar##*/}; myvar=${myvar%% *}; echo $myvar Si desea evitar un comando externo (sed)

0
ULick 15 ene. 2018 a las 18:16