Wie kann man in Less mehrere mit AND verknüpfte Filterbedingungen angeben?
Ich möchte ein Protokoll filtern, dessen Zeilen KEIN „nat“ enthalten, sondern die IP-Adresse 192.168.1.1, wie:
&/!nat && 192.168.1.1
Es funktioniert jedoch nicht, das Ergebnis ist leer ...
Bitte beraten.
Antwort1
Seit Version v569wenigerSie können Filter „stapeln“, um in eine Protokolldatei „hineinzudrillen“.
Aus der Manpage:
&pattern
Display only lines which match the pattern; lines which do not
match the pattern are not displayed. If pattern is empty (if
you type & immediately followed by ENTER), any filtering is
turned off, and all lines are displayed. While filtering is in
effect, an ampersand is displayed at the beginning of the
prompt, as a reminder that some lines in the file may be hidden.
Multiple & commands may be entered, in which case only lines
which match all of the patterns will be displayed.
Certain characters are special as in the / command:
^N or !
Display only lines which do NOT match the pattern.
^R Don't interpret regular expression metacharacters; that
is, do a simple textual comparison.
Hier würden Sie also Folgendes tun: &!nat
Enterdann &Ctrl+R192.168.1.1
Enteroder um beispielsweise eine Übereinstimmung 192.168.1.1
innerhalb zu vermeiden .192.168.1.123
&Ctrl+R\<192\.168\.1\.1\>
Enter
Antwort2
ich bin überzeugtweniger192.168.1.1
Erlaubt nicht, nur Zeilen mit , sondern ohne anzuzeigen nat
.
- Sie können
|
(oder) verwenden. ||
und&
existieren&&
nicht!
Sie können die Übereinstimmung nur für den gesamten Ausdruck (mit am Anfang) invertieren , aber!
danach ist nichts Besonderes
Eine Alternative ist die VerwendungsedVorweniger.
sed -n -e '/nat/ d' -e '/192\.168\.1\.1/ p' FILE | less