У меня есть эта строка cap/media/101/101.mp4, и мне нужно вырезать 101 в другой переменной.
Я пытаюсь сделать это с помощью sed, но это не дает мне необходимый мне результат.
echo cap/media/101/101.mp4 | sed -e 's/d/\(.*\)/\1/'
может кто-нибудь прокомментировать это?
Принимая согласованные поля, простая команда awk может выполнить трюк:
echo cap/media/101/101.mp4 | awk -F"/" '{print $3}'
Выход:
101
(Поздняя вечеринка :)). Так много способов обмануть этого кота ... Вот несколько:
Здесь я получаю цифры, окруженные /:
С 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