bash 기록 범위보기


30

history명령은 현재 세션의 모든 기록을 나열합니다. 처럼:

1 ls 
2 cd /root
3 mkdir something
4 cd something
5 touch afile
6 ls
7 cd ..
8 rm something/afile
9 cd ..
10 ls
11 history

위해서하는 것은 관심의 항목을 검색하려면 나는 파이프를 할 수있는 history때와 grep같은

history | grep ls
1 ls
6 ls
10 ls

또한 다음과 같은 마지막 3 개의 명령을 볼 수 있습니다.

history 3
11 history
12 history | grep ls
13 history 3

그러나 특정 범위의 역사를 어떻게 얻습니까? 예를 들면 다음과 같습니다.

history range 4 7
4 cd something
5 touch afile
6 ls
7 cd ..

마지막 x명령을 나열한 다음로 파이프 할 수 head있습니다.
Bratchley

@Bratchley :이를 위해서는 마지막 명령 수를 알아야합니다. 이것을 고려하면 내 기록에 history | grep something번호가 매겨진 명령의 결과를 보여 주며 123 234 345마지막으로 실행 된 명령의 수를 알 수 없습니다 ( history이 경우). 내 마지막 명령은 400, 500 등으로 번호가 매겨 질 수 있습니다. 먼저 그 숫자를 확인하고, 차이점을 파악하고, 마지막 x명령을 나열한 다음 파이프로 연결해야합니다.head
Slartibartfast

답변:


52

대신을 history사용 fc하여 범위를 선택할 수 있습니다.

fc -l 4 7

4
끝에서 세는 음수도 받아들 fc -l -16 -10입니다.
Franklin Yu

흠, 왜 실제 명령에 대한 인수 대신에 완전히 새로운 명령이 필요한지 궁금합니다.
Ringo

10

history 명령 을 사용해야 하는 경우 sed 또는 awk를 통해 파이프하십시오.

history | sed -n '10,20p'

history | awk 'NR >= 10 && NR <= 20'

그렇지 않으면 cuonglm의 대답이 더 좋습니다.


6
우리는 나쁜 대안에 빠져 있기 때문에이 문제를 조합 head하고 tail덜 우아하게 해결할 것입니다. 10-> 25 범위의 경우을 사용해야 history | head 25 | tail 15합니다.
Aaron

1

와 함께 역사 사용하기 내가 찾고있는 명령 주위 의 줄 번호에 grep 가장 효과적입니다.

예를 들어 나는 내가 한 일을 찾고 있습니다. ping mybox 20 줄 에서 있습니다.

$ history | grep "ping mybox" 20325 ping mybox

그것은 선 20325이므로 [20320..20339]범위 의 숫자로 시작하는 선을 grep해야 합니다.

$ history | grep ^203[2-3][0-9]


(1)“20 이하”라고 말하지만 예제는 -5와 +14를 보여줍니다. (2) 역사 번호에 선행 공백이있는 것처럼 보이기 때문에 이것은 효과가 없습니다.
Scott
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.