行番号なしのBash履歴


129

bash 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

歴史的なグラフィックソース。

あなたの素晴らしい解決策をみんなに感謝します。Paulは最も単純で、bash履歴のサイズが2000に設定されているので、私にとってはうまくいきます。

今朝見つけたクールな記事も共有したかった。私が現在使用しているいくつかの良いオプションがあります。たとえば、bash履歴に重複したエントリを入れないようにしたり、複数のbashセッションが履歴ファイルを上書きしないようにしたりします。http//blog.macromates.com/2008/working-with -history-in-bash /


なぜcat ~/.bash_history除外されているのか質問してもいいですか?
flow2k

回答:


204

これを試して:

$ history | cut -c 8-

historyファイルを読み取る代わりに、コマンドからの出力をパイプすることはできますか?
cwd 2011

動作するようです!それが何をしているのか説明できますか?数値が1〜10,000であれば機能しますか?
cwd 2011

29
man cuthistoryコマンドの出力の各行の最初の7文字を削除しています。数が99,999を超えた場合にのみ、私は見たことがない何かを問題を持つべきである(と私は貝に使うたくさん)。しかし、あなたがそれについて心配している場合:history | sed 's/^ *[0-9]* *//'
キース・トンプソン、

1
@Paul Rのソリューションは私が必要とするものだと思います。最初は、historyコマンドが行番号にスペースをcut埋め込んでいることを理解していませんでしたが、構文がより意味をなすようになりました:) 100Kを超える履歴で機能するソリューションを@Keith Thompsonに感謝
cwd 2011

5
@cwd:履歴に100,000個のコマンドがある場合は、キーボードから離れて家に帰る時間です。すでに家にいる場合は、外に出ます。8-)}(はい、履歴はセッション間で保持できることを知っています。)
キース・トンプソン

22

awk 助けられる:

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

長い歴史がある場合、この答えは失敗する可能性があります。


ハハ、ありがとう- substrとてもシンプルです、私は私のものを使っていますhistory | awk '{for (i=2;i<=NF;i++) printf("%s ", $i);print("\r")}'!!
geedoubleya 2014年

17

この質問はbashに関するものであり、多くの人はzshに切り替えたくないと思っています(キューへの反対票...)。

ただし、zshに切り替えても構わない場合、zshはこれをネイティブでサポートします(履歴のフォーマットに関する他のオプションも同様)。

zsh> fc -ln 0

/server/114988/removing-history-or-line-numbers-from-zsh-history-fileを参照してください


7
実際にfcbash組み込みです。唯一の違いは、最初の行が1であることです。つまり、それはfc -ln 1
wisbucky

//、誰かがこのような状況でBashを使用するようになるまで、Bashに代わるものがあることを知らなかったという事実に賛成票を投じてください。
Nathan Basanese

11

私はこれに遅れていますが、短い方の方法は~/.bashrcor ~/.profileファイルに以下を追加することです:

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

bashからmanpage

       HISTTIMEFORMAT
              この変数が設定されていてnullでない場合、その値は
              関連付けられたタイムスタンプを出力するstrftime(3)のフォーマット文字列
              各履歴エントリは、組み込みの履歴によって表示されます。もし
              この変数が設定され、タイムスタンプが履歴に書き込まれます
              ファイルをシェルセッション全体で保持できるようにします。これは
              タイムスタンプと区別するための履歴コメント文字
              他の歴史の線。

この機能を使用すると、スマートハックは、変数をキャリッジリターン(\r)に「印刷」しK、実際のタイムスタンプの代わりに行(ANSIコード)をクリアすることで構成されます。


Aは、より多くのあいまいな構文を使用して、単純なビット:HISTTIMEFORMAT=$'\r\e[K'
wjandrea

5
そして、1行のオプション: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 14

4

-cオプションを使用した切り取りは、ほとんどの実用的な目的で機能しますが、awkへの履歴のパイピングがより良い解決策になると思います。例えば:

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

または

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

これらのソリューションはどちらも同じことを行います。履歴の出力はawkに送られています。次に、awkは、historyコマンドの出力の番号に対応する最初の列を空白にします。ここでは、出力の数値部分の文字数を気にする必要がないため、awkの方が便利です。

print $0printデフォルトは行に表示されるすべてを印刷するため、と同等です。タイピングprint $0はより明確ですが、どれを選択するかはあなた次第です。行動print $0と、単にprintあなたが(ファイルを印刷するためのawkを使用した場合の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とにかくそれを実行する場合は、最初のカットは冗長です-代わりに式に追加するだけです。
ムーペット

2
$ hh -n

https://github.com/dvorka/hstrを試してみると、Bash履歴を(オプションの)メトリックベースの順序で「推奨ボックススタイル」でフィルタリングできます。つまり、順方向と逆方向の両方ではるかに効率的で高速です。

ここに画像の説明を入力してください

これは、簡単にバインドすることができCtrl-r、および/またはCtrl-s


1

あなたはcutそれを解決するためにコマンドを使うことができます:

STDINまたはファイルからフィールドを切り取ります。

  • STDINの各行の最初の16文字を切り取ります。 cut -c 1-16

  • 指定されたファイルの各行の最初の16文字を切り取ります。 cut -c 1-16 file

  • 3番目の文字から各行の終わりまでをすべて切り取ります。 cut -c3-

  • コロンをフィールド区切り文字として使用して、各行の5番目のフィールドを切り取ります(デフォルトの区切り文字はタブです)。 cut -d':' -f5

  • セミコロンを区切り文字として使用して、各行の2番目と10番目のフィールドを切り取ります。 cut -d';' -f2,10

  • スペースを区切り文字として使用して、各行のフィールド3から7を切り取ります。 cut -d' ' -f3-7


0

私はパーティーに遅れていることを知っていますが、これは覚えるのがとても簡単です:

cat ~/.bash_history

正しいが、OPの2行目:「ここでのポイントはhistoryコマンドを使用することなので、猫に返信しないでください〜/ .bash_history」
Cireo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.