Como faço para o grep arquivar caminhos a partir de um arquivo de texto?

1

Eu tenho um arquivo que tem uma lista de caminhos assim:

"1"       "/user/bin/share"
"2"       "/home/user/.local"
"3"       "/root/"

Existe uma maneira de extrair apenas os caminhos? Eu não quero os números ou aspas. Como posso sed ou grep os caminhos fora do arquivo? Qual regex seria necessário para tal tarefa?

    
por James Heald 07.09.2018 / 02:10

4 respostas

6

Se todos os caminhos começarem com / , você poderá corresponder apenas a / seguido por uma sequência de caracteres que não sejam " :

$ grep -o '/[^"]*' file
/user/bin/share
/home/user/.local
/root/

Como alternativa, para uma abordagem mais estruturada, use awk para extrair aspas e imprimir apenas o segundo campo:

awk '{gsub(/"/,"",$2); print $2}' file
    
por 07.09.2018 / 02:21
1

Supondo que os caminhos não contenham caracteres de nova linha,

$ sed 's/^.*[[:blank:]]"//; s/"$//' <file
/user/bin/share
/home/user/.local
/root/

O código sed primeiro remove tudo em cada linha, incluindo o primeiro caractere " precedido por um espaço em branco (espaço ou tabulação). Em seguida, remove o " no final.

Isso permite que os caminhos contenham espaços e% caracteres " incorporados, mas não a combinação em branco + " .

    
por 07.09.2018 / 07:53
1

Por que não seria simples

awk -F\" '{print $4}' file
/user/bin/share
/home/user/.local
/root/

trabalho?

    
por 07.09.2018 / 10:27
1

abordagem simples. Arranque o campo # 4, com aspas como delimitadores, usando cut .

$ cut -f4 -d\" file
/user/bin/share
/home/user/.local
/root/
$
    
por 07.09.2018 / 10:45