正規表現区切り文字と複数行フィールドを使用して ~/.zsh_history から ZSH コマンドのリストを取得する

正規表現区切り文字と複数行フィールドを使用して ~/.zsh_history から ZSH コマンドのリストを取得する

~/.zsh_historyのZSH履歴からすべてのコマンドのリストを取得したいと思います。このファイルの形式は次のとおりです。

: 1467892191:0;cd /usr/share
: 1467892276:0;lsrc
: 1467892743:0;logout
: 1467892751:0;reload
: 1484284548:0;echo 'multiple \
line \
test'

コマンドは複数行にまたがることができます。各コマンドの初期形式はregexと同じです^: \d{10}:\d;

これが望ましい出力です。

cd /usr/share
lsrc
logout
reload
echo 'multiple \n line \n test'

すべての標準Unixコマンドは公正なゲームです。これの目的は、コマンドリストを$ EDITORに渡して、文書や記事を簡単に選択できるようにすることです。

これが私がawkについて知っていることです。ほとんど空白行を印刷します。

awk -F': [0-9]{10}:[0-9];' '{ print $1 }' ~/.zsh_history

答え1

このawkコマンドを試すことはできますか?

$ cat a.txt
: 1467892191:0;cd /usr/share
: 1467892276:0;lsrc
: 1467892743:0;logout
: 1467892751:0;reload
: 1484284548:0;echo 'multiple \
line \
test'
: 1467892191:0;cd /usr/share
: 1467892276:0;lsrc
: 1467892743:0;logout
: 1467892751:0;reload
: 1484284548:0;echo 'multiple \
line \
: 1467892751:0;reload


$ awk -F\; 'NF!=1{printf("\n%s",$NF)}NF==1{printf("n %s ",$1)}' a.txt

cd /usr/share
lsrc
logout
reload
echo 'multiple \n line \ n test'
cd /usr/share
lsrc
logout
reload
echo 'multiple \n line \
reload

関連情報