С вашей командой perl
вы всегда печатаете строку, потому что у вас есть опция -p
. Часть match ничего не делает.
Вы хотите -n
и распечатайте соответствующую часть:
ls -1 *9000.jpg \
| perl -lne 'print $1 if /^(.+)(?=_.+_.+)/'
Поскольку в именах файлов могут быть новые строки, вы должны изменить это, чтобы читать нулевые -имена файлов с разделителями, хотя в вашем случае это может не понадобиться:
printf '%s\0' *9000.jpg \
| perl -lne 'INIT{ $/ = "\0"}; print $1 if /^(.+)(?=_.+_.+)/'
В качестве альтернативы можно прочитать имена файлов в цикле for -, после чего вы можете использовать только расширение параметров оболочки:
for f in *9000.jpg; do printf '%s\n' "${f%_*_*}"; done
Возможно, это лучше подходит для вашей задачи. (=> "Не используйте инструменты редактирования текста на основе строки --для имен файлов." @Кусалананда)
My first question is are the two commands v4l2loopback=gst-launch-1.0 equal?
нет. они не.
gst-launch-1.0
— это команда, которая запускает конвейер GStreamer (, как указано в его аргументах ). GStreamer — это универсальная межплатформенная мультимедийная платформа -v4l2loopback
это вообще не команда. My second question is whether there any ways to use v4l2loopback in OSX?
нет.
v4l2loopback
(который является аббревиатурой от «video for linux (версии 2 )loopback» )тесно интегрируется с ядром linux . ядро является основным компонентом вашей операционной системы. ядро Linux несовместимо с ядром Darwin (, на котором работает ваша OSX)