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