Como excluir caracteres específicos em um arquivo de texto

0

Eu tenho as seguintes linhas em um arquivo de texto:

1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/13/120411.xml 1 
1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/11/105016.xml 2 
1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/15/149972.xml 3 
1 Q0 /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/12/110688.xml 4 

e quero manter apenas esses dados:

1 Q0 120411 1 
1 Q0 105016 2 
1 Q0 149972 3 
1 Q0 110688 4 

ou seja, manter de cada linha do caminho /home/nikol123/Downloads/Ergasia_1/Ergasia_1/metadata/13/120411.xml , por exemplo, apenas o número 120411 e assim por diante ...

    
por user88582 20.10.2014 / 22:16

3 respostas

2

Teste awk com / , . e (espaço) como separadores de campo:

awk -F'[/. ]' '{print $1 " " $2 " " $11 " " $13}' file

Saída:

1 Q0 120411 1
1 Q0 105016 2
1 Q0 149972 3
1 Q0 110688 4
    
por 20.10.2014 / 22:23
0

Experimente o sed:

sed 's/\(1 Q0\).*\/\(.*\)\.xml\( .*\)/ /' file

OR

sed 's/\(.*\)\/home.*\/\(.*\)\.xml\( .*\)//' file

Saída:

1 Q0 120411 1 
1 Q0 105016 2 
1 Q0 149972 3 
1 Q0 110688 4
    
por 15.01.2017 / 18:57
0

Minha solução com sed (OSX & BSD):

sed -E 's!([0-9]*) (Q0) [a-zA-Z0-9_/]*/([0-9]*).xml ([0-9])!   !g' file.txt 

Depois, se você precisar de um padrão diferente (como Q0 não é uma constante ...), você precisa adaptá-lo.

    
por 15.01.2017 / 19:31