Это особенность vte (gnome-terminal) и консоль. Согласно git-log vte, он был добавлен в ноябре 2002 г. :
handle end-of-line selection correctly. Stop highlighting selection on
* src/vte.c: handle end-of-line selection correctly. Stop highlighting
selection on click, but don't lose it until new text is selected.
* python/vte.override: fix binding for set_colors() to properly take a
list of colors for the palette (#97682).
* src/vte.c, src/vte.h: add increase-font-size and decrease-font-size to allow
mimicking XTerm's and Mozilla's behavior on Shift/Control
KP_Add/KP_Subtract
* src/vteapp.c: handle increase-font-size and decrease-font-size.
Konsole добавил его в апреле 2007 г. :
Add menu items and shortcuts to increase and decrease font size. I have tried to keep as close as possible to the recommended Zoom In/Out shortcuts given that Ctrl+[Key] shortcuts cannot be used because they are reserved for terminal application use. Ctrl++ zooms in, Ctrl+Shift+- zooms out.
Что касается сочетаний клавиш, xterm использовал сдвинутую клавиатуру плюс / минус с 1999 г. , имитирующий rxvt, который представил эту функцию несколькими годами ранее (см. в версии 2.18 , август 1996 г.).
Это четыре реализации за более чем 10 лет. В macOS (OSX) Terminal.app и iTerm2 выполняют обе функции (используя команду , а не control ), но поскольку нет надежной документации по Terminal.app, трудно сказать, когда функция была добавлена.
Опять же, есть несколько эмуляторов терминалов, в которых эта функция отсутствует (все еще).
Запись отрицаемого шаблона с помощью расширенных регулярных выражений POSIX особенно сложна. Для случая строки типа domain
, где все символы разные, вы можете попробовать:
awk -v re="^([^d]|d*d[^do]|[do]*o(d*d[^do]|[^dm])|[dom]*m(d*d[^do]|[do]\
*o(d*d[^do]|[^dm])|[^da])|[doma]*a(d*d[^do]|[do]*o(d*d[^do]|[^dm])|[dom\
]*m(d*d[^do]|[do]*o(d*d[^do]|[^dm])|[^da])|[^di])|[domai]*i(d*d[^do]|[d\
o]*o(d*d[^do]|[^dm])|[dom]*m(d*d[^do]|[do]*o(d*d[^do]|[^dm])|[^da])|[do\
ma]*a(d*d[^do]|[do]*o(d*d[^do]|[^dm])|[dom]*m(d*d[^do]|[do]*o(d*d[^do]|\
[^dm])|[^da])|[^di])|[^dn]))*[domai]*\$" '$0 ~ re'
Я придумал это много лет назад и возвращаюсь к той моей статье всякий раз, когда мне нужно написать отрицательный regexp, но, должен признаться, я не помню, как я до этого дошел.
Хотя ответ Томаса Дики умный, есть правильный способ сделать это:
awk '!/domain/ {print}' <<EOF
This is domain test
This is do test
This is test
EOF
This is do test
This is test
Попытки использовать следующие 3 метода
Первый метод с использованием awk
команда
awk '$0 !~/domain/{print $0}' file.txt
выход
This is do test
This is test
метод2 с использованием sed
sed -n '/domain/!p' file.txt
выход
Это проверка Это тест
Третий метод с использованием Python
#!/usr/bin/python
k=open('test.txt','r')
for i in k:
if "domain" not in i:
print i.strip()
выход
This is do test
This is test
Because you stated "Need to do with regular expression only. Can not change the Awk code" try this:
Вместо "отрицания оператора" вы можете "отрицать регулярное выражение" . Вам просто нужно передать символ отрицания!
как часть регулярного выражения !/domain/
в сценарий awk.
awk '{if ($0 ~ !/domain/) {print $0}}'