упорядочить строку и сохранить значение в новой переменной

У меня есть эта строка cap/media/101/101.mp4, и мне нужно вырезать 101 в другой переменной.

Я пытаюсь сделать это с помощью sed, но это не дает мне необходимый мне результат.

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

может кто-нибудь прокомментировать это?

1
задан 19 May 2017 в 15:04

2 ответа

Принимая согласованные поля, простая команда awk может выполнить трюк:

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

Выход:

101
2
ответ дан 23 May 2018 в 01:40

(Поздняя вечеринка :)). Так много способов обмануть этого кота ... Вот несколько:

Здесь я получаю цифры, окруженные /:

С cut: [!d2 ]

cut -d/ -f3 

С grep:

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

С perl:

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

С python:

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

Другой sed:

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

Другой awk (хотя уже предоставленный ответ awk, получающий 3-мерное поле с разделителем /, должен быть способом):

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

С go:

package main

import (
    "fmt"
    "strings"
)

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

Пример:

% 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]+)/.*#\1#' <<<'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
1
ответ дан 23 May 2018 в 01:40

Другие вопросы по тегам:

Похожие вопросы: