Como extrair o segundo elemento do caminho? [duplicado]

0

Como faço para extrair esse padrão usando sed?

Este é o meu caminho: /sample/xyz/logs/test.logs

A saída deve ser: xyz

Como isso é possível se o caminho continuar mudando, por exemplo, como

/example/xyz/log/test.logs?

usando sed ou awk?

    
por user6690412 10.10.2018 / 14:29

3 respostas

0

Se o seu script é bash / dash / ksh / zsh, você não precisa de nenhuma ferramenta externa, a substituição de parâmetro pode dar a resposta:

path=/sample/xyz/logs/test.logs
path=${path#/*/}
echo ${path%%/*}
  • # é removido da esquerda.
  • % é removido da direita.
  • dobrar o personagem torna a correspondência gananciosa, ou seja, corresponde ao máximo possível.
por 10.10.2018 / 15:11
1

Eu conheço três maneiras de fazer isso. Eu assumirei que o caminho é passado como stdin.

Método 1

echo "/sample/xyz/logs/test.logs" | cut -d / -f 3

Isso corta a entrada com o delimitador especificado com -d / e escolhe o terceiro campo, que é a parte xyz que você deseja.

Método 2

echo "/sample/xyz/logs/test.logs" | awk -F / '{print $3}'

awk é um comando muito poderoso com o qual você pode escrever uma lógica bastante complexa. Você pode usá-lo desta forma simples para fazer o mesmo que o método 1.

Método 3

echo "/sample/xyz/logs/test.logs" | sed -r 's/^\/\w+\/(\w+)\/.*//g'

Usando sed com expressão regular, você omite a primeira barra, depois a palavra junto com a seguinte barra. Pegue a palavra que vem depois da segunda barra e remova o resto.

Como você pode ver, a complexidade aumenta em relação aos métodos.

    
por 10.10.2018 / 14:56
0

Se você sempre quiser a segunda parte do caminho, tente isso

echo "/sample/xyz/logs/test.logs" | awk -F/ '{print $3}'
    
por 10.10.2018 / 14:37