Bash - 증분 기록 검색(ctrl+r) - 인접하지 않은 여러 단어 일치

Bash - 증분 기록 검색(ctrl+r) - 인접하지 않은 여러 단어 일치

Ctrlbash 기록을 검색하기 위해 +를 사용할 R때 인접하지 않은 두 단어를 일치시키는 방법이 있습니까 ? 예를 들어, 을 포함 httpd하지만 인접하지 않은 awk마지막 명령을 찾고 싶다고 가정해 보겠습니다 . bash 기록을 greping하여 둘 다 일치시키거나 Ctrl+를 눌러 원하는 명령을 찾을 때까지 키워드와 일치하는 항목을 순환하는 것보다 R더 나은 옵션이 있습니까?

답변1

배쉬 참조 매뉴얼설명하다:

Readline은 지정된 문자열이 포함된 줄의 명령 기록을 검색하는 명령을 제공합니다.

고정 문자열이 아닌 정규식이 필요합니다.

노력하다하스트:
1.설치하다
2.구성

다음과 비슷한 내용이 표시됩니다 hstr.
여기에 이미지 설명을 입력하세요.

고쳐 쓰다:
또 다른 도구는후지브.

  1. 설치하다: git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf && ~/.fzf/install

  2. 리소스 재할당 ~/.bashrc:source ~/.bashrc

다음과 비슷한 내용이 표시됩니다 fzf. 여기에 이미지 설명을 입력하세요.

답변2

이 작업을 수행하는 내장된 방법은 모르지만 grep을 수행하고 기록 파일을 편집하여 결과가 마지막에 표시되도록 하는 작은 함수를 작성할 수 있습니다. 그런 다음 쉽게 일치하는 항목을 선택하고 새로운 역사에 추가하세요. 계속해서 전진하세요. (이렇게 하면 기록의 명령 순서가 변경됩니다.)

이런 기능이군요. 나는 당신이 나타나는 순서에 관계없이 2개 이상의 단어를 찾고 싶다고 가정합니다. 허용되는 최대 일치 수는 10개입니다. 또한 초기 grep이 큰 문자열을 반환하지 않거나 bash 문자열 대신 임시 파일을 사용해야 한다고 가정합니다.

hist(){
    local maxmatches=10 word=$1 matches new nummatches
    shift
    history -w # write out history to HISTFILE
    matches=$(grep -e "$word" $HISTFILE)
    for word
    do   new=$(echo "$matches" | grep -e "$word")  || return # if str too big
         matches=$new
    done
    nummatches=$(echo "$matches" | wc -l)
    echo "$nummatches matches"
    if [ $nummatches -gt 0 -a $nummatches -le $maxmatches ]
    then echo "$matches" >>$HISTFILE # add matches to end of file
         history -c # clear history
         history -r # read history from file
         history $nummatches # show last few lines
    else echo "zero or too many matches. (max $maxmatches)"
    fi
}

단어에 대해 정규식 패턴 일치를 수행하지 않으려면 grep 대신 fgrep을 사용하십시오. 특정 시퀀스만 필요한 경우 "httpd.*awk"와 같은 단일 단어를 사용하세요. 이 방법으로 한 단어만 사용되는 경우 for 루프를 제거할 수도 있습니다.

관련 정보