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
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 ...
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
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
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.