Geralmente, é uma má ideia processar HTML / XML com expressões regulares porque elas não são expressivas o suficiente para lidar com todos os casos de canto. No entanto, a saída do seu grep sugere que podemos no seu caso preciso.
Aqui está uma maneira de processar a saída que você obtém do comando grep com sed:
sed -e 'N;N;N;N;s/^File-\(.*\):Field1 : \(.*\)<\/title>.*Field2 : .*<span>\(.*\)<\/span *>.*Field3 : .*<span>\(.*\)<\/span *>.*Field4 : .*<span>\(.*\)<\/span *>.*Field5 : .*<span>\(.*\)\s*<\/span *>/ | | | | | /'
Explicações:
-
N;N;N;N;
: isso é usado para unir as linhas cinco por cinco (para ter todos os campos de um arquivo na mesma linha) -
s/
: isso inicia um comando de substituição, a primeira parte é a correspondência, a segunda é a substituição -
^File-\(.*\):
: corresponde ao número do arquivo -
Field1 : \(.*\)<\/title>
: corresponde ao primeiro campo -
.*Field2 : .*<span>\(.*\)<\/span *>
: corresponde ao segundo - ...
-
/ | | / | | /
: esta é a parte de substituição: cada grupo delimitado por\(.*\)
na primeira parte é capturado e reutilizável através de variáveis especiais,
, etc.
Resultado:
1 | DATA_FIELD_1 | DATA_FIELD_2 | DATA_FIELD_3 | DATA_FIELD_4 | DATA_FIELD_5
2 | DATA_FIELD_1 | DATA_FIELD_2 | DATA_FIELD_3 | DATA_FIELD_4 | DATA_FIELD_5
3 | DATA_FIELD_1 | DATA_FIELD_2 | DATA_FIELD_3 | DATA_FIELD_4 | DATA_FIELD_5