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