Переместите строку от вывода до передней стороны вывода или пользовательского переупорядочения

В RHEL/CentOs/Fedora можно использовать ниже инструментов

  • ncurses основывал инструмент для включения/отключения: ntsysv

  • GUI для запускать/останавливать: system-config-services

2
29.01.2014, 16:39
3 ответа

Прямо сейчас я сделал это путем сохранения к /tmp/ и затем выполняясь grep на нем несколько раз:

find "$PWD" -name '__openerp__.py' | awk -F/ -vOFS=/ 'NF-=2' | sort -u > /tmp/openerp_addon_list.txt ; (egrep '/openerp/addons|/web/addons$' /tmp/openerp_addon_list.txt; egrep -v "/openerp/addons|/web/addons|/openerp/test" /tmp/openerp_addon_list.txt)
/home/domas/Sources/openerp/7.0/server/openerp/addons
/home/domas/Sources/openerp/7.0/web/addons
/home/domas/Sources/openerp/7.0/addons
/home/domas/Sources/openerp/7.0/development
/home/domas/Sources/openerp/7.0/external
/home/domas/Sources/openerp/7.0/groups/account-invoice-report
/home/domas/Sources/openerp/7.0/groups/banking-addons
/home/domas/Sources/openerp/7.0/groups/partner-contact-management
/home/domas/Sources/openerp/7.0/groups/sale-reports
/home/domas/Sources/openerp/7.0/groups/webkit-utils
0
27.01.2020, 22:06
  • 1
    Это работало на Вас? Поскольку в моей системе это только печатает две строки, учитывая Ваш демонстрационный вход: <my path> сопровождаемый <my path>/server. –  Joseph R. 29.01.2014, 16:26
  • 2
    да это работает. также я передаю вывод | tr "\n" "," | sed 's/,$/ /' | tr " " "\n" но это - немного вне этого вопроса границы. Возможно, мой образец является неправильным в этом случае. –  JackLeo 29.01.2014, 16:28
  • 3
    Отредактированный и добавленный вывод. –  JackLeo 29.01.2014, 16:32

Я не уверен, что понимаю то, что Вы пытаетесь сделать здесь, но если все, что Вы хотите, должно иметь строку с /openerp/addons быть первым и /web/addons быть вторым, почему не просто что-то вроде этого:

find "$PWD" -name '__openerp__.py' | awk -F/ -vOFS=/ 'NF-=2' | 
  sed 's#^\(.*/openerp/addons.*\)#aaa%\1#; s#^\(.*/web/addons.*\)#aab%\1#' | 
   sort -u | sed 's/^aa.%//'

Не особенно умный или изящный, но это просто добавит aaa% к началу строк, содержащих /openerp/addons и aab% к началу строк, содержащих /web/addons. Последнее sed удаляет их снова после сортировки. Принятие Вас не имеет никаких файлов, имя которых запускается с aa.%, это должно иметь желаемый результат.

Или, Вы могли использовать простую остроту жемчуга, которая также делает задание sort -u:

find fafa/ | awk -F/ -vOFS=/ 'NF-=2' | 
 perl -ne 's#^(.*/openerp/addons)#aaa%$1#; s#^(.*/web/addons)#aab%$1#; $k{$_}++; 
            END{for (sort keys(%k)){s/^aa.%//; print }}'
2
27.01.2020, 22:06

Как я упомянул в комментарии, конвейеры не являются способом пойти; по крайней мере, не с инструментом, столь же простым как grep. Я использовал бы более мощный инструмент, такой как Python или Perl, для этого. Вот фильтр Perl, который мог бы помочь:

your command | perl -ne '
    if($already_found_lines){
        print # print the current line as is
    } else{
        if   (m{/web/addons}    ) { $web=$_     and $found_web++    }
        elsif(m{/openerp/addons}) { $openerp=$_ and $found_openerp++}
        else                      { push @buffer,$_                 }
        $already_found_lines = ($found_web and $found_openerp);
        if($already_found_lines)  { print "${openerp}$web";print for @buffer}
    }'

Протестированный правильно с Вашим демонстрационным входом.

1
27.01.2020, 22:06
  • 1
    Спасибо, но у меня действительно есть код с Python, но, как упомянуто я просто хотел, чтобы он сделал удар одним лайнером. Таким образом в моем случае, хотя здорово и работы - это не что-то, которое я закончу тем, что использовал. –  JackLeo 29.01.2014, 16:26
  • 2
    @JackLeo Технически, это - острота (независимо от того, что это может означать), :). Это не Bash, тем не менее, и ни один не Ваше решение, которое просто использует Bash для вызова внешних инструментов. –  Joseph R. 29.01.2014, 16:29
  • 3
    Хорошо да Вы правы. Я даю Вам это. Только для чего-то, поскольку простой жемчуг, кажется, бит излишества. Я мог, просто вставил тот же код Python к, '' и это будет одним лайнером также. –  JackLeo 29.01.2014, 16:31
  • 4
    @JackLeo я думаю "overkillness" об этом подходе, очень спорен. Был бы с помощью простого кода Python вместо 4 вызовов инструмента (наряду с подоболочкой) быть излишеством? Кроме того, высокоуровневый код имеет преимущество того, чтобы быть более читаемым (по-моему, по крайней мере). –  Joseph R. 29.01.2014, 16:34
  • 5
    да, который я действительно согласовываю с Вами, но затем почему даже беспокоят чем-то передающую информацию к коду perl/python, в то время как это может получить саму ту же информацию. –  JackLeo 29.01.2014, 16:39

Теги

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