Фильтрация результата команды

Если OpenCV Вы имеете в виду библиотеки машинного зрения по http://opencv.willowgarage.com/ затем, они уже упаковываются для debian Научной Командой Debian.

Ваш лучший выбор состоит в том, чтобы загрузить debianised исходный пакет с Вашего ближайшего зеркала debian, изменить debian/rules и/или Make-файл или настроить и т.д. по мере необходимости, чтобы скомпилировать правильно на пи малины и восстановить пакеты.

Упаковочная работа уже сделана, нет никакой потребности сделать это снова.... и снова и снова каждый раз Ваш хотело обновить их.

Существует целый набор двоичных пакетов, но libopencv-dev, вероятно, что Вы хотите запустить с http://packages.debian.org/search?keywords=libopencv-dev

1
19.11.2013, 16:53
3 ответа

Вывод от gsettings команда выполняет текстовый синтаксис GVariant. Этот параметр является строкой, распечатанной в одинарных кавычках.

Необходимо удалить кавычки.

dir_uri=$(gsettings get org.gnome.desktop.background picture-uri |
          sed "s/^'//; s/'\$//; s/\\\\\\(.\\)/\\1/")

Вы затем получаете URI. Если имя файла не содержит специальных символов, достаточно удалить file:// вначале (или даже file:).

dir=$(gsettings get org.gnome.desktop.background picture-uri |
      sed "s~^'file://~~; s~'\$~~")
2
27.01.2020, 23:21

Когда я выполняю эту команду на Ubuntu 12.10, я получаю следующее:

$ dir=$(gsettings get org.gnome.desktop.background picture-uri)
$ echo $dir
'file:///usr/share/backgrounds/warty-final-ubuntu.png'

Я был бы просто очистка значение, сохраненное в $dir как так:

$ dir="${dir/file:\/\//}"
$ echo $dir
'/usr/share/backgrounds/warty-final-ubuntu.png'

Это усечет file:// с начала строки. Можно изменить это, если Вы получаете что-то другое. В Вашем случае:

$ dir="${dir/\/\//}"

Подробнее

Вышеупомянутое использует замену шаблона, ${var/pattern/} который удалит pattern от переменной $var.

Альтернативы

@jthill также имел хорошее предложение использования Bash, "удаляют соответствие нотации' префикса шаблона вместо этого. Это немного более хитро для понимания, IMO, но работает одинаково хорошо.

Пример

$ dir="\'${dir#\'file://}"

Вышеупомянутое удаляет префикс, \'file:// от $dir. Это заменяет его галочкой, ', сопровождаемый остатком от $dir без 'file://.

Страница справочника Bash

Если бы Вы хотите читать больше на этих функциях Bash, я поощрил бы Вас делать так. Это функции, которые мы используем выше.

выборки из страницы справочника Bash

${parameter#word}
${parameter##word}
       Remove matching prefix pattern.  The word is expanded to produce a 
       pattern just as in pathname expansion.  If the pattern matches the 
       beginning of  the  value  of  parameter, then  the  result  of  the  
       expansion is the expanded value of parameter with the shortest 
       matching pattern (the ``#'' case) or the longest matching pattern 
       (the ``##'' case) deleted.  If parameter is @ or *, the pattern 
       removal operation is applied to each positional parameter in turn, 
       and the expansion is the resultant list.  If parameter is  an array 
       variable subscripted with @ or *, the pattern removal operation is 
       applied to each member of the array in turn, and the expansion is the 
       resultant list.

${parameter/pattern/string}
       Pattern substitution.  The pattern is expanded to produce a pattern 
       just as in pathname expansion.  Parameter is expanded and the longest 
       match of pattern against  its  value is replaced with string.  If 
       pattern begins with /, all matches of pattern are replaced with 
       string.  Normally only the first match is replaced.  If pattern 
       begins with #, it must match at the beginning of the expanded value 
       of parameter.  If pattern begins with %, it must match at the end of 
       the expanded value of parameter.  If  string  is  null, matches  of  
       pattern  are  deleted  and the / following pattern may be omitted.  
       If parameter is @ or *, the substitution operation is applied to each 
       positional parameter in turn, and the expansion is the resultant 
       list.  If parameter is an array variable subscripted with @ or *, the 
       substitution operation is applied to each member of  the  array in 
       turn, and the expansion is the resultant list.

Последующий вопрос № 1

OP спросил следующее в комментариях ниже.

теперь у меня есть следующая проблема.. не мог открыться отображают '/home/thamara/.config/variety/Downloaded/wallbase_type_all_order_random_nsfw_100_board_1/wallpaper-2249773.jpg''

Проблема, если Вы заметите, то, что существует 2 метки в конце строки. Я понятия не имею, почему это там, но если требуется избавиться от запаздывающих меток, можно использовать это sed управляйте прямо после предыдущей замены я дал Вам. Я не мог выяснить способ иметь дело с 2 единственными метками в конце, просто использующем функции замены Bash.

dir=$(echo "$dir" | sed "s/''/'/")

Пример

$ echo "$dir"
'/home/thamara/.config/variety/Downloaded/wallbase_type_all_order_random_nsfw_1‌​00_board_1/wallpaper-2249773.jpg''

$ dir=$(echo "$dir" | sed "s/''/'/")
$ echo "$dir"
'/home/thamara/.config/variety/Downloaded/wallbase_type_all_order_random_nsfw_1‌​00_board_1/wallpaper-2249773.jpg'
2
27.01.2020, 23:21
  • 1
    dir=\'${dir#\'file://} порты везде, я думаю, что замена шаблона не могла бы работать в #!/bin/sh сценарии. –  jthill 16.11.2013, 05:29
  • 2
    @jthill - это было предназначено, чтобы быть Bash, только решением, учитывая тег на Q является Bash. Однако я просто попробовал и Ваше решение и мое, и они оба работали в/bin/sh также. –  slm♦ 16.11.2013, 05:49
  • 3
    Да, я должен был открыть с "деталью" или даже "очень мелкой деталью". Я не знал, что удар не отключит это даже с набором POSIXLY_CORRECT. подчеркните штриховой линией отклоняет его. –  jthill 16.11.2013, 06:11
  • 4
    @jthill - все еще положительная сторона для выделения. Это некоторые менее известные функции Bash, таким образом, всегда хорошо привлечь внимание к ним. –  slm♦ 16.11.2013, 06:15
  • 5
    я думаю, что это из-за этих вещей---> '<-- –  glaasje 16.11.2013, 20:21

Если все, что Вы хотите сделать, устраняют дополнительные два // в начале имени файла, и '' это странно обнаруживается в конце имени файла, которое можно использовать sed:

dir=$(gsettings get org.gnome.desktop.background picture-uri|sed -e 's/\/\/\//\//' -e "s/'//g; s/^/'/; s/$/'/")

Это заменит /// с / и удалите любые ошибочно отформатированные экземпляры или дубликаты '. Наконец, это добавит a ' вначале и конец строки для надлежащей инкапсуляции имени файла, если это имеет какие-либо пробелы. Это решение немного долго, но оно должно правильно сделать задание.

Я также повторю, какой упомянутый slm и говорят Вам это, когда я работал:

gsettings get org.gnome.desktop.background picture-uri

Я получил результат в формате:

'file:///usr/share/backgrounds/warty-final-ubuntu.png'
0
27.01.2020, 23:21
  • 1
    Извините, но это не решает мою проблему.. "преобразуйте: не мог открыть изображение /home/thamara/.config/variety/Favorites/wallpaper-44803.jpg'': No such file or directory @ error/blob.c/OpenBlob/2643. convert: no decode delegate for this image format /home/thamara/.config/variety/Favorites/wallpaper-44803.jpg'' error/constitute.c/ReadImage/552. преобразовывает: никакие изображения не определили `/home/thamara/Pictures/blur.jpg' error/convert.c/ConvertImageCommand/3145". –  glaasje 17.11.2013, 17:31
  • 2
    @glaasje, я обновил свой ответ для работы на основе ошибки, которую Вы получаете. Использование –  John B 18.11.2013, 00:10

Теги

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