다양한 bash 기록 보기

다양한 bash 기록 보기

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 ..

답변1

대신에 history다음을 사용할 수 있습니다.fc, 범위를 선택할 수 있습니다.

fc -l 4 7

답변2

만약 너라면~ 해야 하다History 명령을 사용하고 sed 또는 awk를 통해 파이프하십시오.

history | sed -n '10,20p'

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

그렇지 않으면 cuonglm의 답변이 더 나은 옵션입니다.

답변3

기록을 사용하여줄 번호에 대한 grep내가 찾고 있는 명령이 나에게 가장 적합합니다.

ping mybox예를 들어 나는 약 20줄 정도의 작업을 찾고 있습니다 .

$ history | grep "ping mybox" 20325 ping mybox

그것은 라인 20325이므로 범위의 숫자로 시작하는 라인을 잡아야 합니다 [20320..20339].

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

답변4

'history'를 사용해야 하는 경우 히스토리 라인 4-7에 대해 이것이 더 정확한 sed 기반 버전입니다.

history | sed '/^4 /,/^7 /!d;/^7 /q'

이는 히스토리 명령 출력의 n번째 라인이 아닌 히스토리의 n번째 라인을 인쇄하려는 원래 포스터의 의도를 포착합니다. 거의 대부분의 경우 두 가지가 동일하지 않습니다. 예를 들어, 이 기록 출력에서 ​​포스터가 관심을 갖는 숫자는 다음과 같습니다.

... 20 preceding lines.
12134 ls dataDir
12135 ls myDir
12136 ls something
... some more lines

21,22,23이 아니라 12134,12135,12136이며 sed 명령은 이를 캡처해야 합니다. 이 경우 다음과 같습니다.

history | sed '/^12134 /,/^12135 /!d;/^12135 /q'

숫자의 특정 형식:

'/^n[space]/'

숫자가 줄의 시작 부분에 있고 그 뒤에 공백이 있다는 의도를 포착합니다. (이걸 보면 공간이 불필요하다는 생각이 들지만, 기분이 좋아지네요, 하.)

그리고 네, 위에서 @G.Gabunia가 말했듯이 fc가 더 ​​쉽습니다.

관련 정보