reset
имеет свое место, но очищает экран. Если вы используете xterm
или что-нибудь совместимое, то самым коротким и наименее навязчивым будет
printf '\033[?9l'
Это не указано явно в Отслеживание мыши разделе Последовательности управления XTerm, но xterm
позволяет вам сбросить (отключить) режим мыши, выключив любой из возможных режимов, которые могут быть включены. Они документированы как именованные константы:
#define SET_X10_MOUSE 9
#define SET_VT200_MOUSE 1000
#define SET_VT200_HIGHLIGHT_MOUSE 1001
#define SET_BTN_EVENT_MOUSE 1002
#define SET_ANY_EVENT_MOUSE 1003
и 9
- самая короткая.
Режим мыши включается многими приложениями. Если выйти из приложения, не выключив его, это приведет к появлению странных символов, которые вы видели. Приложения ncurses выключают режим мыши в endwin
, который вызывают все хорошо воспитанные приложения curses. Другие приложения могут не использовать (n)curses, или забыть вызвать endwin
.
ncurses-приложения проверяют, доступен ли режим xterm-mouse, тестируя возможность kmous
(которая является частью screen
описания терминала). Это стандартный способ проверки наличия данной возможности с 1999 года, поэтому маловероятно, что приложение включило режим мыши случайно. Скорее, это указывает на приложение, которое забыло выполнить свою работу.
Кстати, в пакете ncurses-term
Debian нет записи screen.xterm
(его сохранение более полезно, чем удаление). Вот список всех связанных с экраном записей в этом пакете. Большинство из них используется для исправления несоответствий в поведении экрана
для различных терминалов:
/usr/share/terminfo/s/screen.konsole
/usr/share/terminfo/s/screen-16color-bce
/usr/share/terminfo/s/screen-16color
/usr/share/terminfo/s/screen3
/usr/share/terminfo/s/screen.mrxvt
/usr/share/terminfo/s/screen-bce.Eterm
/usr/share/terminfo/s/screen-bce.gnome
/usr/share/terminfo/s/screen.xterm-xfree86
/usr/share/terminfo/s/screen-bce.konsole
/usr/share/terminfo/s/screen-bce.mlterm
/usr/share/terminfo/s/screen-256color-s
/usr/share/terminfo/s/screen-bce.mrxvt
/usr/share/terminfo/s/screen-bce.rxvt
/usr/share/terminfo/s/screen.linux
/usr/share/terminfo/s/screen.vte
/usr/share/terminfo/s/screen-bce.xterm-new
/usr/share/terminfo/s/screen.teraterm
/usr/share/terminfo/s/screen-16color-bce-s
/usr/share/terminfo/s/screen.xterm-r6
/usr/share/terminfo/s/screen+fkeys
/usr/share/terminfo/s/screen-256color-bce-s
/usr/share/terminfo/s/screen.mlterm
/usr/share/terminfo/s/screen-16color-s
/usr/share/terminfo/s/screen-bce.linux
/usr/share/terminfo/s/screen.gnome
/usr/share/terminfo/s/screen.rxvt
/usr/share/terminfo/s/screen2
/usr/share/terminfo/s/screen.Eterm
/usr/share/terminfo/s/screen.xterm-new
Как насчет того, чтобы -o
под grep просто напечатать совпадающую часть? Нам все еще нужно удалить <>
, но tr
там работает.
dmesg |egrep -o "<([a-zA-Z\.0-9 ]+)>" |tr -d "<>"
Marvell Console 1.01
Попробуйте это,
sed -nE 's/^pass2:.*<(.*)>.*$/\1/p'
Или POSIXly(-E
еще не стал стандартом POSIX по состоянию на 2019 год):
sed -n 's/^pass2:.*<\(.*\)>.*$/\1/p'
Выход:
$ printf '%s\n' 'pass2: <Marvell Console 1.01> Removable Processor SCSI device' | sed -nE 's/^pass2:.*<(.*)>.*$/\1/p'
Marvell Console 1.01
Будет напечатано только последнее вхождение <...>
для каждой строки.
Я пробовал следующие 3 метода, используя sed, awk и python
команда sed
echo "pass2: <Marvell Console 1.01> Removable Processor SCSI device" | sed "s/.*<//g"|sed "s/>.*//g"
выход
Marvell Console 1.01
команда awk
echo "pass2: <Marvell Console 1.01> Removable Processor SCSI device" | awk -F "[<>]" '{print $2}'
выход
Marvell Console 1.01
питон
#!/usr/bin/python
import re
h=[]
k=open('l.txt','r')
l=k.readlines()
for i in l:
o=i.split(' ')
for i in o[1:4]:
h.append(i)
print (" ".join(h)).replace('>','').replace('<','')
выход
Marvell Console 1.01
Вы можете извлечь подстроку с помощью следующей команды grep -o -e
:
cat some.log | grep "lineWithThisText" | grep -o -e 'SomeSequence1[0-9]*[A-Z]*SomeSequence2'
По какой-то причине *
работает, а не +
для 1 или нескольких совпадений в этой команде сопоставления регулярного выражения grep.
Прочтите руководство grep с помощью следующей команды:
man grep
Прочтите об опциях -o
и -e
.
Я использую это на работе, чтобы извлечь тонны данных из нескольких строк журнала.