내가 알고 자주 사용하는 것

내가 알고 자주 사용하는 것

내가 알고 자주 사용하는 것

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

두 번째 명령에서는 ^Mthen을 눌러 빌드합니다. 스크립트 등을 작성하려는 경우가 아니면 less가 시작될 때 Enter를 누르는 것이 더 쉽습니다.Ctrl-VEnter

답변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. 귀하의 요청에 대한 해석이 잘못된 경우, 제가 어디에서 잘못되었습니까?

관련 정보