다양한 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

만약 너라면~ 해야 하다기록 명령을 사용하여 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가 더 ​​쉽습니다.

관련 정보