줄 번호가없는 배쉬 히스토리


129

배쉬 history 명령은 매우 멋집니다. 줄 번호가 표시되는 이유를 이해하지만 history 명령을 호출하고 줄 번호를 표시하지 않는 방법이 있습니까?

요점은 history 명령을 사용하는 것이므로 답장하지 마십시오. cat ~/.bash_history

전류 출력 :

  529 man history
  530 ls
  531 ll
  532 clear
  533 cd ~
  534 history

역사적 그래픽 소스.

원하는 출력 :

man history
ls
ll
clear
cd ~
history

역사적 그래픽 소스.

훌륭한 솔루션을 제공해 주신 모든 분들께 감사드립니다. 내 배쉬 히스토리 크기가 2000으로 설정되어 있기 때문에 Paul이 가장 간단하며 나를 위해 일할 것입니다.

또한 오늘 아침에 찾은 멋진 기사를 공유하고 싶었습니다. bash 기록에서 중복 항목을 유지하고 여러 bash 세션이 기록 파일을 덮어 쓰지 않도록하는 것과 같이 현재 사용중인 몇 가지 좋은 옵션이 있습니다 : http://blog.macromates.com/2008/working-with -역사 속의 역사 /


cat ~/.bash_history배제 되었는지 물어봐도 될까요?
flow2k

답변:


204

이 시도:

$ history | cut -c 8-

history파일을 읽는 대신 명령 의 출력을 파이프 할 수 있습니까 ?
cwd

작동하는 것 같습니다! 그것이 무엇을하고 있는지 설명 할 수 있습니까? 숫자가 1-10,000 인 경우 작동합니까?
cwd

29
man cut. history명령 출력의 각 줄에서 처음 7자를 삭제합니다 . 수는 99,999, 내가 본 적이 뭔가를 초과하는 경우에만 문제가 발생한다 (나는 조개를 사용하는 많은 ). 하지만 걱정이되는 경우 :history | sed 's/^ *[0-9]* *//'
Keith Thompson

1
@Paul R의 솔루션이 필요한 것이라고 생각합니다. 나는 역사 명령이 공백으로 줄 번호를 cut채우고 있다는 것을 깨닫지 못했고 이제 구문이 더 합리적입니다.
cwd

5
@cwd : 기록에 100,000 개의 명령이 있다면 키보드에서 물러나 집으로 돌아갈 차례입니다. 이미 집에 있다면 밖에 나가십시오. 8-)} (예, 세션 전체에서 기록을 유지할 수 있음을 알고 있습니다.)
Keith Thompson

22

awk 도울 수있다:

history|awk '{$1="";print substr($0,2)}'

오랜 역사를 가진다면 이 답변 은 실패 할 수 있습니다.


Ha Ha, 고마워요- substr훨씬 더 간단합니다 history | awk '{for (i=2;i<=NF;i++) printf("%s ", $i);print("\r")}'.
geedoubleya

17

나는이 질문이 bash에 대한 것이라는 것을 알고 있으며 많은 사람들이 zsh (cue downvotes ...)로 전환하지 않는 것을 선호합니다.

그러나 zsh 로 기꺼이 전환하려는 경우 zsh는이를 기본적으로 지원합니다 (히스토리 형식화를위한 다른 옵션).

zsh> fc -ln 0

( /server/114988/removing-history-or-line-numbers-from-zsh-history-file 참조 )


7
사실 fcA는 bash내장뿐만 아니라. 유일한 차이는 첫 번째 줄이라는 것이다 1는 것, 그래서fc -ln 1
wisbucky

//, 누군가가 이와 같은 상황에서 그들을 태울 때까지 가장 오랫동안 Bash의 대안이 있다는 것을 알지 못했다는 사실에 대해 공감하십시오.
Nathan Basanese

11

나는 이것에 늦었지만 더 짧은 방법은 당신 ~/.bashrc이나 ~/.profile파일에 다음을 추가하는 것입니다 :

HISTTIMEFORMAT="$(echo -e '\r\e[K')"

bash에서 manpage:

       HISTTIMEFORMAT
              이 변수가 설정되고 널이 아닌 경우 해당 값은
              연관된 시간 소인을 인쇄하기위한 strftime (3)의 형식 문자열
              히스토리 내장으로 각 히스토리 항목이 표시됩니다. 만약
              이 변수가 설정되고 타임 스탬프가 기록에 기록됩니다.
              파일을 셸 세션에서 보존 할 수 있습니다. 이것은 사용
              타임 스탬프를 구별하는 히스토리 주석 문자
              다른 역사 라인.

이 기능을 사용하여 스마트 핵은 변수 "print"를 캐리지 리턴 ( \r)으로 만들고 K실제 타임 스탬프 대신 라인 (ANSI 코드 )을 지우는 것으로 구성됩니다 .


더 모호한 구문을 사용하여 조금 더 간단합니다.HISTTIMEFORMAT=$'\r\e[K'
wjandrea

5
한 줄 옵션 :HISTTIMEFORMAT=$'\r\e[K' history
wjandrea

5

또는 sed를 사용할 수 있습니다.

history | sed 's/^[ ]*[0-9]\+[ ]*//'

별명을 사용하여이를 표준으로 설정할 수 있습니다 (bash_profile에 고정).

alias history="history | sed 's/^[ ]*[0-9]\+[ ]*//'"

1
\+기본 정규 표현식에서 POSIX 호환이 아닙니다. 비표준 확장을 지원하지 않는 \{1,\}경우 사용하십시오 . sed\+
Richard Hansen

4

-c옵션을 사용하여 절단하는 것이 대부분의 실제 목적으로 작동 하지만 awk에 대한 배관 기록이 더 나은 솔루션이라고 생각합니다. 예를 들면 다음과 같습니다.

history | awk '{ $1=""; print }'

또는

history | awk '{ $1=""; print $0 }'

이 두 가지 솔루션 모두 동일한 기능을 수행합니다. 역사의 결과는 어색 해졌다. 그런 다음 Awk는 history 명령 출력의 숫자에 해당하는 첫 번째 열을 비 웁니다. 여기서 awk는 출력의 숫자 부분에있는 문자 수에 신경 쓸 필요가 없기 때문에 더 편리합니다.

print $0print기본값은 행에 나타나는 모든 것을 인쇄하는 것이므로. 와 같습니다 . 타이핑 print $0은 더 명확하지만, 어느 쪽을 선택 하느냐에 달려 있습니다. 의 행동 print $0과 단순히 printAWK와 함께 사용할 때 파일을 인쇄 할 AWK 사용하면 더 분명하다 ( cat빠른 대신 AWK의 종류에 수 있지만이 점을 설명하기위한 것입니다).

[예] awk를 사용하여 $ 0의 파일 내용 표시

$ awk '{print $0}' /tmp/hello-world.txt
Hello World!

[예] awk를 사용하여 $ 0없이 파일 내용 표시

$ awk '{print}' /tmp/hello-world.txt
Hello World!

[예] 히스토리 라인이 여러 라인에 걸쳐있을 때 awk 사용

$ history
   11  clear
   12  echo "In word processing and desktop publishing, a hard return or paragraph break indicates a new paragraph, to be distinguished from the soft return at the end of a line internal to a paragraph. This distinction allows word wrap to automatically re-flow text as it is edited, without losing paragraph breaks. The software may apply vertical whitespace or indenting at paragraph breaks, depending on the selected style."

$ history | awk ' $1=""; {print}'
 clear
 echo "In word processing and desktop publishing, a hard return or paragraph break indicates a new paragraph, to be distinguished from the soft return at the end of a line internal to a paragraph. This distinction allows word wrap to automatically re-flow text as it is edited, without losing paragraph breaks. The software may apply vertical whitespace or indenting at paragraph breaks, depending on the selected style."

4
history -w /dev/stdout

출력에서 history --help:

-w 현재 기록을 기록 파일에 기록합니다.

/dev/stdout이 경우 현재 기록을 지정된 파일에 씁니다 .


3

history명령에는 줄 번호를 억제하는 옵션이 없습니다. 모든 사람이 제안한대로 여러 명령을 결합해야합니다.

예 :

history | cut -d' ' -f4- | sed 's/^ \(.*$\)/\1/g'

3
sed어쨌든 그것을 통해 실행하려는 경우 초기 컷은 중복됩니다. 대신 표현식에 추가하십시오.
moopet

2
$ hh -n

당신은 시도 할 수 있습니다 https://github.com/dvorka/hstr 훨씬 더 효율적이고 빠르게 모두 전후 방향 인 즉 (선택 사항) 메트릭 기반의 순서로 배쉬 역사의 필터링 "상자 스타일을 제안"을 가능하게하는을 :

여기에 이미지 설명을 입력하십시오

그것은 쉽게 바인딩 Ctrl-r및 / 또는Ctrl-s


1

명령 cut을 사용 하여 해결할 수 있습니다.

STDIN 또는 파일에서 필드를 잘라냅니다.

  • STDIN의 각 줄에서 처음 16자를 잘라냅니다. cut -c 1-16

  • 주어진 파일의 각 줄의 처음 16자를 잘라냅니다. cut -c 1-16 file

  • 세 번째 문자부터 각 줄의 끝까지 모든 것을 잘라냅니다. cut -c3-

  • 콜론을 필드 구분 기호로 사용하여 각 줄의 다섯 번째 필드를 잘라냅니다 (기본 구분 기호는 탭). cut -d':' -f5

  • 세미콜론을 구분 기호로 사용하여 각 줄의 2 번째 및 10 번째 필드를 잘라냅니다. cut -d';' -f2,10

  • 공백을 구분 기호로 사용하여 각 줄의 3-7 필드를 잘라내십시오. cut -d' ' -f3-7


0

나는 파티에 늦었다는 것을 알고 있지만 이것은 기억하기가 훨씬 쉽습니다.

cat ~/.bash_history

그러나 OP의 두 번째 줄은 "여기서 요점은 history 명령을 사용하는 것이므로 cat ~ / .bash_history에 답장하지 마십시오"
Cireo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.