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.