В emacs исследовать
clipboard-kill-region
clipboard-kill-ring-save
clipboard-yank
Я записал это для копирования целого буфера в буфер обмена:
(defun copy-all ()
"copy buffer to clipboard"
(interactive)
(clipboard-kill-ring-save (point-min) (point-max))
(message "Copy done.") )
Кроме того, я сделал полезный псевдоним названным xc, как это: xclip -selection clipboard
. Затем echo $(pwd) | xc
(например), отправит Ваше положение дерева каталогов в буфер обмена.
И, случайно, я заметил, что могу вставить в urxvt путем нажатия mousewheel кнопки. Мне не нравится использовать мышь вообще, поэтому если Вы знаете, как связать это с сочетанием клавиш, скажите мне.
Править: Я нашел (где-нибудь на этом сайте), что ответ на финал, который (мой) вопрос - он уже сделан, а именно, Shift-Insert.
Если у Вас есть мишень
./app | tee >(grep A > A.out) >(grep B > B.out) >(grep C > C.out) > /dev/null
Можно использовать awk
./app | awk '/A/{ print > "A.out"}; /B/{ print > "B.out"}; /C/{ print > "C.out"}'
Вы могли также использовать способности к сопоставлению с образцом своей оболочки:
./app | while read line; do
[[ "$line" =~ A ]] && echo $line >> A.out;
[[ "$line" =~ B ]] && echo $line >> B.out;
[[ "$line" =~ C ]] && echo $line >> C.out;
done
Или даже:
./app | while read line; do for foo in A B C; do
[[ "$line" =~ "$foo" ]] && echo $line >> "$foo".out;
done; done
Более безопасный путь, который может иметь дело с обратными косыми чертами и строками, запускающимися с -
:
./app | while IFS= read -r line; do for foo in A B C; do
[[ "$line" =~ "$foo" ]] && printf -- "$line\n" >> "$foo".out;
done; done
Как @StephaneChazelas указывает в комментариях, это не очень эффективно. Лучшее решение, вероятно, @AurélienOoms'.
-n
, -e
... Это также будет ужасно неэффективным, поскольку это означает несколько системных вызовов на строку (один read(2)
на символ, при этом файл открыт, пишущий закрытый для каждой строки...). Обычно использование while read
циклы к тексту процесса в оболочках являются плохой практикой.
– Stéphane Chazelas
27.10.2013, 10:55
-n
и т.д. теперь. Насколько я могу сказать обе работы версий хорошо с пробелами, хотя, я неправильно?
– terdon♦
27.10.2013, 16:37
printf
формат. Нет никакой причины отъезда Вас, переменные закрыли кавычки там.
– Stéphane Chazelas
27.10.2013, 22:39
Если у Вас есть несколько ядер, и Вы хотите, чтобы процессы были параллельно, можно сделать:
parallel -j 3 -- './app | grep A > A.out' './app | grep B > B.out' './app | grep C > C.out'
Это породит три процесса в параллельных ядрах. Если Вы хотите там быть некоторым выводом к консоли или основным файлом, это имеет преимущество хранения вывода в некотором порядке, скорее то смешивание его.
Параллель утилиты гну от Ole Tange может быть получена из большей части repos под именем параллель или moreutils. Источник может быть получен из Savannah.gnu.org. Также вводное учебное видео здесь.
Приложение
Используя более позднюю версию параллели (не обязательно версия в Вашем распределении repo), можно использовать более изящную конструкцию:
./app | parallel -j3 -k --pipe 'grep {1} >> {1}.log' ::: 'A' 'B' 'C'
Который достигает результата выполнения одного./приложения и 3 параллелей grep процессы в отдельных ядрах или потоках (как определено самой параллелью, также полагайте, что-j3 является дополнительным, но это предоставляется в этом примере в поучительных целях).
Более новая версия параллели может быть получена путем выполнения:
wget http://ftpmirror.gnu.org/parallel/parallel-20131022.tar.bz2
Затем обычные распаковывают, CD, чтобы быть параллельными - {дата}./настр && делают, sudo делают установку. Это установит параллель, страница справочника параллельная и страница справочника parallel_tutorial.
Вот один в Perl:
./app | perl -ne 'BEGIN {open(FDA, ">A.out") and
open(FDB, ">B.out") and
open(FDC, ">C.out") or die("Cannot open files: $!\n")}
print FDA $_ if /A/; print FDB $_ if /B/; print FDC $_ if /C/'
sed -ne/A/w\ A.out -e/B/w\ B.out -e/C/p <in >C.out
...если
./app | tee >(grep A > A.out) >(grep B > B.out) | grep C > C.out
– evilsoup 26.10.2013, 21:13grep
. – ruakh 26.10.2013, 22:43