내가 알고 자주 사용하는 것
less
+
명령줄에서 - 매개변수를 사용하여 명령을 추가하는 방법이 마음에 듭니다 . 나는 다음과 같은 즉각적인 검색을 좋아합니다.
$ less +/DHCP /var/log/syslog
# result: syslog at the point of the first occurrence of DHCP
그러나 나는 또한 다음과 같은 출력을 따르도록 설정하고 싶습니다.
$ less +F /var/log/syslog
# result: a syslog that follows the file, very much like tail -f would.
내가 뭘 사용하고 싶어?
하지만 가끔은 둘 다 갖고 싶어질 때도 있어요. 하지만 어떻게 해야할지 모르겠습니다.
$ less +F +/DHCP /var/log/syslog
# result: "Pattern not found" - it will actually bunch up both things to one string.
처음에 누를 필요 없이 자동으로 필터링하는 방법을 알려주실 분, 보너스 포인트를 주실 분 계신가요?
$ less +\&DHCP /var/log/syslog
# result: "please press enter" after which the filtering search _is_
# running correctly. I would love to get rid of that extra <enter>
edit2: 흥미롭게도 다음을 결합할 수 있습니다.
$ less +?DHCP +G /var/log/syslog
# result: jumps to the end and reverse-searches for DHCP
# But I have to press enter (which I'd like to avoid)
하지만 나는 이것을 할 수 없습니다:
$ less +G +?DHCP /var/log/syslog
# this is being bunched up to ?DHCPG and subsequently not found.
그렇다면 순서가 중요한 것 같습니다. 모든 문자열이 하나의 문자열로 해석됩니까?
버전 정보
편집하다이것은 내 시스템에 덜 설치된 버전이지만 필요한 경우 다른 버전을 설치할 의향이 있습니다!
$ less --version
less 458 (GNU regular expressions)
Copyright (C) 1984-2012 Mark Nudelman
[...]
답변1
나중에 귀하의 의견에 따르면 귀하의 질문의 첫 번째 부분을 이해하지 못하는 것 같습니다. 나에게는 작품을 사용하여 업데이트된 파일에 나타나는 새로운 인스턴스를 less +F +/pattern logfile
계속 강조합니다 .pattern
질문의 보너스 부분에 대해서는 다음 명령 중 하나를 시도해 볼 수 있습니다.
less +\&DHCP$'\n' /var/log/syslog
또는
less +\&DHCP^M /var/log/syslog
두 번째 명령에서는 ^M
then을 눌러 빌드합니다. 스크립트 등을 작성하려는 경우가 아니면 less가 시작될 때 Enter를 누르는 것이 더 쉽습니다.Ctrl-V
Enter
답변2
엄청난 복잡성 측면에서 래퍼를 통해 변경 가능한 검색어로 자동 추적됩니다 expect
!
#!/usr/bin/env expect
#
# Sticky search wrapper for less; tails the given file, though with
# input of
# /asdf
# or whatever will search for that new term then re-tail the file.
# Probably needs `less` with (the default) hilight mode enabled.
if {[llength $argv] == 0} {
puts stderr {Usage: $argv0 [searchterm] file}
exit 64
} elseif {[llength $argv] == 1} {
set fname [lindex $argv 0]
set search ""
} else {
set fname [lindex $argv 1]
set search [lindex $argv 0]
}
# FIXME soas to nix any default options (like turning off hilight) and
# on account of LESSOPEN and LESSCLOSE being security risks due to the
# defaults certain vendors set.
foreach ev [list LESS LESSOPEN LESSCLOSE] {
if {[info exists env($ev)]} {
unset env($ev)
}
}
match_max 999
set timeout -1
spawn -noecho less $fname
expect {
# TODO need better way to detect that less didn't fly...
-ex "No such file or directory" { exit }
-re "." { }
default { exit }
}
if {$search ne ""} {
send -- "/$search\r"
}
send -raw "F"
interact {
-echo -re "/(.*)\[\n\r]" {
# send_user "DBG search $interact_out(1,string)"
send -raw "\003\r/"
send -- $interact_out(1,string)
send -raw "\rF"
}
}
답변3
내가 이해하는 바에 따르면, /var/log/syslog
파일을 읽고 "DHCP"가 포함된 모든 항목을 보고 새 항목이 나타나는 대로 계속 보고 싶어합니다. 이것이 맞다면 를 통해 달성할 수 있습니다 tail -f /var/log/syslog | grep DHCP
. 귀하의 요청에 대한 해석이 잘못된 경우, 제가 어디에서 잘못되었습니까?