Единственная команда, берущая две строки для извлечения строку между ними, как 'TR' (без выражений)

Когда система не является подробной о присоединении нового USB-устройства, можно всегда проверять вывод dmesg видеть если приложенное новое обнаруживаемое USB-устройство.

Для доступа к устройству хранения данных на Устройстве на iOS Вам будет нужен gtkpod-aac пакет (Который является, это - имя в Debian/Ubuntu), другие дистрибутивы могут использовать другое имя.

См. эту статью TechRepublic, имеет некоторые хорошие подсказки: http://www.techrepublic.com/blog/opensource/how-do-i-connect-an-apple-ipod-to-an-ubuntu-linux-pc/217

5
28.09.2013, 00:53
2 ответа

Если разделители могут несколько раз появляться на строки, Вы могли бы использовать жемчуг вместо этого как:

between() {
  perl -Tlne 'BEGIN{$b=shift;$e=shift}
             print for /\Q$b\E(.*?)\Q$e\E/g' "$@"
}

И затем например:

$ echo "[b]test[e] foo [b]bar[e]" | between '[b]' '[e]'
test
bar

Можно также использовать его как:

between BEG END file1 file2...
8
27.01.2020, 20:35
  • 1
    Можно совместно использовать ответ в то же время, что и просьба и совместно использовать с другими и возвращать вход, так, чтобы был то, почему я отправил Q&A-и потому что я не был уверен, выходило ли мое решение из символов для сейфа от всех типов входа. Спасибо за решение для Perl! Это выходит из всех символов в этих двух входных строках правильно? –  Gary S. Weaver 27.09.2013, 22:08
  • 2
    @GaryS.Weaver, да это что \Q для. –  Stéphane Chazelas 27.09.2013, 22:24
  • 3
    Охладитесь!Спасибо за помощь. Я использую Ваше решение, но оставлю sed и grep решения в случае, если то, что я имел проблему жемчуга, я предполагаю. –  Gary S. Weaver 27.09.2013, 22:32

Выполнение этого в sed в общем потребовало бы, чтобы символы выхода в regexp раньше находили подстроку, которую я нашел здесь (примечание: больше информации здесь, если Вы сталкиваетесь с проблемами).

Затем я нашел, как передать по каналу в функцию здесь.

Помещение всего, что вместе в функцию я могу использовать в моем .bashrc, похож (хотя я не должен устанавливать a и b Вар, но он помогает читать):

between(){
  a=$(printf '%s\n' "$1"|sed 's![\*.^$/[]!\\&!g')
  b=$(printf '%s\n' "$2"|sed 's![\*.^$/[]!\\&!g')
  sed "s/.*$a\(.*\)$b.*/\1/"
}

как Joseph R. упомянул, этот ответ шоу, как использовать grep-oP, чтобы сделать подобный. Для выхода из совместимого с Perl regexp, я нашел это, поэтому возможно, следующее будет работать также:

between(){
  a=$(printf '%s\n' "$1"|sed 's![]\*.^+?(){|$[]!\\&!g')
  b=$(printf '%s\n' "$2"|sed 's![]\*.^+?(){|$[]!\\&!g')
  grep -oP "(?=$a).*?(?=$b)"
}
2
27.01.2020, 20:35
  • 1
    Символы, которых нужно оставить, \^$[.* и s управляют разделителем как / для BREs. Использование a while read цикл делает не, распознаются здесь. –  Stéphane Chazelas 27.09.2013, 21:56
  • 2
    @StephaneChazelas Спасибо! 1. Вы могли разъясниться, какую часть ответа Вы имеете в виду? Я выхожу : в первом, потому что я нахожусь в POSIX (я разъясню, что также), но для второго это - PCRE, таким образом, я думал, что должен был выйти .^$*+?()[{\|? Для второй части Вашего комментария я передаю по каналу в него, который является причиной while read. Я разъясню это в ответе. –  Gary S. Weaver 27.09.2013, 22:03
  • 3
    Это становится сбивающим с толку, чтобы выяснить, как быть уверенным, что этих 2 входных строк полностью оставляют так, они не вызовут проблемы, если неправильный набор символов был обеспечен, как введено, так, чтобы была основная причина, я совместно использовал свой ответ, чтобы попытаться быть уверенным, что то, что я делал, собиралось работать или видеть, существует ли лучшее решение. –  Gary S. Weaver 27.09.2013, 22:10
  • 4
    : имеет только значение внутри [...] внутри [...] как в [[:blank:]]. После того как Вы вышли весь [, нет никакой потребности выйти : или ]. –  Stéphane Chazelas 27.09.2013, 22:13
  • 5
    Да, посмотрите мое предложенное редактирование для улучшения. Вы не должны использовать echo или function или a while read цикл. –  Stéphane Chazelas 27.09.2013, 22:23

Теги

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