정규식 또는 grep과 일치하는 기록의 명령을 실행합니다.

정규식 또는 grep과 일치하는 기록의 명령을 실행합니다.

특정 정규식과 일치하는 명령을 기록에서 실행할 수 있는지 궁금합니다. 나는 당신이 다음과 같은 일을 할 수 있다는 것을 알고 있습니다

fc 232 248

그것은 당신의 것으로 들어간 history다음 개정판 232-248로 연속적으로 진행됩니다.

그런데 중간에 내가 하고 싶지 않은 명령이 있으면 이를 지정할 수 있는 방법이 있나요? 이제 내 것을 찾아 history출력합니다.grep

history | grep checkout

그러면 결제를 통해 수행한 모든 최종 작업이 검색됩니다.

232 git checkout master files/file1.txt
234 git checkout master files/file2.txt
248 git checkout master files/file3.txt

일부 숫자를 필터링하므로 파이프로 추출된 숫자만 실행하고 싶습니다. 그 사이의 모든 것보다는

답변1

특정 문자열(예: "checkout") 또는 정규식(예:)이 포함된 bash에서 모든 명령을 실행하려면 다음을 수행하십시오."checkout.+file\d"history

grep -E "string_exp" $HOME/.bash_history | while read line; do eval "$line"; done

함수로 저장할 수 있습니다 ~/.bashrc.

#!/bin/bash

all_prev () {
   grep -E "$1" $HOME/.bash_history | while read line; do eval "$line"; done
}

그런 다음 나중에 다음을 입력하면 됩니다.

all_prev checkout

편집하다:

  • .bash_history시간이 지남에 따라 파일이 누적되면서 많은 중복 명령을 실행하지 않으려면 아직 설정되지 않은 경우 export HISTCONTROL=ignoredups이 항목이 설정되어 있는지 확인하십시오.~/.bashrc

  • 매번 검색어가 포함된 검색을 다시 실행 하지 않으려면 all_prev정규식을 사용 ^하고 $줄의 시작과 끝 부분에 문자를 지정하세요.


그러나 다음과 같이 더 강력한 기록 필터링 기능을 갖춘 쉘도 확인해야 할 수도 있습니다.zsh(심지어fish).

관련 정보