sed a cadeia e mantenha o valor na nova variável

0

Eu tenho esse String cap/media/101/101.mp4 e eu preciso cortar o 101 em outra variável.

Estou tentando fazer isso com sed , mas não está me dando a saída de que preciso.

echo cap/media/101/101.mp4 | sed -e 's/d/\(.*\)//'

alguém por favor pode dar uma ideia sobre isso?

    
por kunal 08.02.2017 / 14:30

3 respostas

1

Supondo que você queira os caracteres entre media/ e o próximo / (com base no que você disse nos comentários), você pode cortar essa parte com

sed -r 's|.*media/([^/]+).*||'

Explicação

  • -r usa ERE (para que não precisemos escapar de () ou + para usá-los como metacaracteres
  • s|old|new| replace old com new (usando um delimitador alternativo para evitar ter que escapar de / na string)
  • ([^/]+) salva alguns caracteres que não são /
  • do padrão salvo (o restante é descartado)
por Zanna 08.02.2017 / 14:58
2

Assumindo campos consistentes, um simples comando do awk pode resolver o problema:

echo cap/media/101/101.mp4 | awk -F"/" '{print $3}'

Saída:

101
    
por arupgsh 08.02.2017 / 15:02
1

(Tarde para a festa :)). Tantas maneiras de esfolar esse gato ... Aqui estão algumas:

Aqui, recebo os dígitos entre / :

com cut :

cut -d/ -f3 

com grep :

grep -Po '/\K\d+(?=/)'

com perl :

perl -F/ -lane 'print $F[2]'

com python :

python3 -c 'import sys; i=sys.stdin.read().split("/"); print(i[2])'

Outro sed :

sed -E 's#.*/([0-9]+)/.*##' 

Outro awk (embora a resposta awk já fornecida ao obter o terceiro campo delimitado por / seja o caminho a seguir):

awk '{i=gensub(".*/([0-9]+)/.*", "\1", "g"); print i}'

com go :

package main

import (
    "fmt"
    "strings"
)

func main() {
    str := "cap/media/101/101.mp4"
    fmt.Println(strings.Split(str, "/")[2])
}

Exemplo:

% cut -d/ -f3 <<<'cap/media/101/101.mp4'                                                          
101

% grep -Po '/\K\d+(?=/)' <<<'cap/media/101/101.mp4'
101

% perl -F/ -lane 'print $F[2]' <<<'cap/media/101/101.mp4'                                         
101

% python3 -c 'import sys; i=sys.stdin.read().split("/"); print(i[2])' <<<'cap/media/101/101.mp4'
101

% sed -E 's#.*/([0-9]+)/.*##' <<<'cap/media/101/101.mp4'
101

% awk '{i=gensub(".*/([0-9]+)/.*", "\1", "g"); print i}' <<<'cap/media/101/101.mp4'
101

## Go Playground: https://play.golang.org/p/kGdzyywEB2
    
por heemayl 08.02.2017 / 15:42