Некоторое время у меня было это в моем ~ / .screenrc
:
bind -c pasteline 1 eval copy 'stuff "-Y"' 'paste .'
bind -c pasteline 2 eval copy 'stuff "2-Y"' 'paste .'
bind -c pasteline 3 eval copy 'stuff "3-Y"' 'paste .'
bind -c pasteline 4 eval copy 'stuff "4-Y"' 'paste .'
bind -c pasteline 5 eval copy 'stuff "5-Y"' 'paste .'
bind -c pasteline 6 eval copy 'stuff "6-Y"' 'paste .'
bind -c pasteline 7 eval copy 'stuff "7-Y"' 'paste .'
bind -c pasteline 8 eval copy 'stuff "8-Y"' 'paste .'
bind -c pasteline 9 eval copy 'stuff "9-Y"' 'paste .'
bindkey ¬ command -c pasteline
В основном, набираю ¬ 1 ] изнутри экрана вставляет первую строку над курсором, ¬ 2 вторую строку и так далее.
В моих ~ / .Xdefaults
у меня также есть:
XTerm.VT100.translations: #override\
Meta <KeyPress> /: dabbrev-expand()
Что позволяет xterm
завершить (после Alt + / ) то, что на экране ( глядя назад от позиции курсора).
С помощью zsh
при использовании в экране
вы можете:
copy-screen() {
screen -X eval copy 'stuff "-$ H\r"' 'writebuf .lastoutput'
killring=(${(Oaf)"$(<~/.lastoutput)"})
CUTBUFFER=$killring[1]
killring[1]=()
}
zle -N copy-screen
bindkey '\ec' copy-screen
привязать Alt + C к тому виджету, в котором хранятся строки над курсор в вырезанный буфер и кольцо уничтожения (то, что вы вставляете с помощью Ctrl + Y и перебираете с помощью Alt + Y в режиме emacs
). (выше предполагается, что экран
был запущен из вашего домашнего каталога).
Если вставленный текст необходимо заключить в кавычки (например, потому что он содержит пробелы или другие специальные символы оболочки), вы можете ввести Alt + " для zsh
, чтобы заключить его в кавычки.
В качестве примера вы только что запустили:
$ find /usr/local -size +1M
/usr/local/lib/liblzma.a
/usr/local/share/doc/sudo/ChangeLog
/usr/local/share/perl/5.18.2/Unicode/Unihan/Definition.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/RSKangXi.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/IRG_TSource.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/HanYu.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/RSUnicode.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/IRG_GSource.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/IRGKangXi.db
/usr/local/share/perl/5.18.2/Unicode/Unihan/IRGHanyuDaZidian.db
И вы хотите открыть vim
в этом sudo ChangeLog выше. При первом подходе вы набираете:
vim ¬9
При втором подходе:
vim /usAlt+/
И повторяйте Alt + / , пока не дойдете до журнала изменений.
При третьем подходе:
vim Alt+CCtrl+YAlt+Y
И повторяйте Alt + Y , пока не дойдете до журнала изменений.
Последний подход можно использовать для запроса $ s1
.
Вместо сохранения в массиве killring
сохраните его в массиве (например, $ s
) и используйте $ s [1]
для первой строки, $ s [2]
для второго ...
copy-screen() {
screen -X eval copy 'stuff "-$ H\r"' 'writebuf .lastoutput'
s=(${(Oaf)"$(<~/.lastoutput)"})
}
zle -N copy-screen
bindkey '\ec' copy-screen
Этот Alt + C сохраняет строки над курсором в массиве s
.
В любом случае, мы получаем то, что отображается на экране, что не обязательно совпадает с выводом последней команды. Например, printf 'a \ bc \ n'
выводит 5 байтов a
, BS, c
, SPC и LF, но отображает только c
.
Вот для чего tee
вbash
:
./a.out | tee >(grep A >fileA) | tee >(grep B >fileB) | grep C >fileC
или еще проще вzsh
:
./a.out > >(grep A >fileA) > >(grep B >fileB) > >(grep C >fileC)
awk -F':' '$1 ~ "[AB]" { print > $1 } $1 !~ "[AB]" { print > "otheroutput" } ' input
Или, в общем случае, весь ввод будет разделен на основе первого поля:
awk -F':' '{ print > $1 }' input
Используется:
$ cat input
A: abc
B: xyz
A: aaa
A: bbb
B: zzz
C: fff
$ awk -F':' '$1 ~ "[AB]" { print > $1.txt } $1 !~ "[AB]" { print > "otheroutput" } ' input
$ cat A
A: abc
A: aaa
A: bbb
$ cat B
B: xyz
B: zzz
$ cat otheroutput
C: fff