Substitui um intervalo de texto por caracteres especiais usando sed

0

Estou tentando substituir um intervalo de texto por sed contendo caracteres especiais.

Eu tenho a seguinte saída:

"Users" "/Users/Users"   SERVER1
"Roaming Profiles" "/Roaming Profiles/Roaming Profiles"   SERVER2

Eu gostaria que fosse assim:

Users SERVER1
Roaming Profiles SERVER2
    
por Robert 18.03.2015 / 21:11

2 respostas

1

$ sed -r 's/"([^"]*)"([^"]*"){2}[[:space:]]*/ /' file
Users SERVER1
Roaming Profiles SERVER2

Como funciona

O comando de substituição do sed tem o formato s/old/new/ . A expressão regular para old tem as seguintes partes:

  • "([^"]*)" - corresponde à primeira string entre aspas e salva no grupo 1.

  • ([^"]*"){2} - corresponde à segunda string citada (incluindo os espaços que a precedem).

  • [[:space:]]* - corresponde aos espaços que seguem a segunda string citada.

A expressão regular para new é simplesmente , que é um espaço seguido pela primeira string citada que, por meio dos parênteses, salvamos no grupo 1.

Mac OSX ou outras plataformas BSD

No OSX, tente:

sed -E 's/"([^"]*)"([^"]*"){2}[[:space:]]*/ /' file
    
por 18.03.2015 / 21:15
1

Usando o Awk:

awk -F\" '{print $2,$5}' file
    
por 18.03.2015 / 21:38

Tags