ПРИМЕЧАНИЕ.:это отредактированный ответ, чтобы сделать решение как можно более общим. Посмотрите историю редактирования, чтобы узнать, что было сделано изначально, и посмотрите комментарии к проблемам с предыдущим ответом.
Ключевым моментом здесь является использование группировки с помощью ()
и -r
для расширенных регулярных выражений. Группировка паттернов с помощью ()
позволит вам ссылаться на них в зависимости от их положения в нотации через \NUMBER
. В частности, вот что я придумал:
sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
Это читается так:
На практике это работает с переменным числом нулей:
$ echo "at 12:27 AM on 11/08/2017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
at 12:27 AM on 11/8/2017
$ echo "at 12:27 AM on 00000011/000008/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
at 12:27 AM on 11/8/00002017
$ echo "at 12:27 AM on 011/08/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
at 12:27 AM on 11/8/00002017
$ echo "at 12:27 AM on 000000011/0000008/00002017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
at 12:27 AM on 11/8/00002017
Обратите внимание, что это достаточно хорошо справляется со своей работой по сохранению всего, что приходит в части года, если это требуется. Если мы хотим избавиться и от этого -, мы также можем добавить третью группу.
$ echo "at 12:27 AM on 005/0025/0002017" | sed -r 's/0*([^0]+)\/0*([^0]+)\/0*([^0]+)/\1\/\2\/\3/g'
at 12:27 AM on 5/25/2017
Это также довольно хорошо работает с другими символами (, которые не требуются, но их приятно иметь):
$ echo "at 12:27 AM on 0November/00Fifth/2017" | sed -r 's/0*([^0]+)\/0*([^0]+)/\1\/\2/g'
at 12:27 AM on November/Fifth/2017
из предоставленной информации udevadm вы сможете временно переименовать 2 идентификатора устройства с помощью:
echo 'CODEC_A' | sudo tee /devices/pci0000:00/0000:00:1a.1/usb3/3-1/3-1:1.0/sound/card1/id
echo 'CODEC_B' | sudo tee /devices/pci0000:00/0000:00:1a.1/usb3/3-2/3-2:1.0/sound/card0/id
новые псевдонимы идентификаторов должны отображаться в
cat /proc/asound/cards
в правилах udev замените 'card0' или 'card1' на 'card?' поэтому идентификатор карты, назначенный udev, игнорирует индексный номер карты и основан только на USB-подключении
DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb3/3-1/3-1:1.0/sound/card?", ATTR{id}="CODEC_A"
DEVPATH=="/devices/pci0000:00/0000:00:1a.1/usb3/3-2/3-2:1.0/sound/card?", ATTR{id}="CODEC_B"
больше информации об этом наhttps://alsa.opensrc.org/Udev
Мой ответ на
Правила Удева для кажущихся неразличимыми устройств
может оказаться полезным. Пришлось 4 одинаковые камеры прибить...