В RHEL/CentOs/Fedora можно использовать ниже инструментов
ncurses основывал инструмент для включения/отключения: ntsysv
GUI для запускать/останавливать: system-config-services
Прямо сейчас я сделал это путем сохранения к /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
Я не уверен, что понимаю то, что Вы пытаетесь сделать здесь, но если все, что Вы хотите, должно иметь строку с /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 }}'
Как я упомянул в комментарии, конвейеры не являются способом пойти; по крайней мере, не с инструментом, столь же простым как 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}
}'
Протестированный правильно с Вашим демонстрационным входом.
:)
. Это не Bash, тем не менее, и ни один не Ваше решение, которое просто использует Bash для вызова внешних инструментов.
– Joseph R.
29.01.2014, 16:29
<my path>
сопровождаемый<my path>/server
. – Joseph R. 29.01.2014, 16:26| tr "\n" "," | sed 's/,$/ /' | tr " " "\n"
но это - немного вне этого вопроса границы. Возможно, мой образец является неправильным в этом случае. – JackLeo 29.01.2014, 16:28